day3-6根据分类id查询菜品
(1)DishController完善
位置:sky-server/src/main/java/com/sky/controller/admin/DishController.java
完整代码:
package com.sky.controller.admin;
import com.sky.dto.DishDTO;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.DishService;
import com.sky.vo.DishVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/admin/dish")
@Api(tags = "后台菜品管理")
@Slf4j
public class DishController {
@Autowired
private DishService dishService;
/**
* 新增菜品
* @param dishDTO
* @return
*/
@PostMapping
@ApiOperation(value = "新增菜品")
public Result save(@RequestBody DishDTO dishDTO){
log.info("新增菜品:{}", dishDTO);
dishService.saveWithFlavors(dishDTO);
return Result.success();
}
/**
* 分页查询菜品
* @param dishPageQueryDTO
* @return
*/
@GetMapping("/page")
@ApiOperation("分页查询菜品")
public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO){
log.info("分页查询菜品:{}", dishPageQueryDTO);
PageResult pageResult = dishService.pageQuery(dishPageQueryDTO);
return Result.success(pageResult);
}
/**
* 删除菜品
* @param ids
* @return
*/
@DeleteMapping
@ApiOperation("批量删除菜品")
public Result delete(@RequestParam List<Long> ids){
log.info("删除菜品:{}", ids);
dishService.deleteBatch(ids);
return Result.success();
}
/**
* 根据ID查询菜品详情
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation("根据ID查询菜品详情")
public Result<DishVO> getById(@PathVariable Long id){
log.info("查询菜品:{}", id);
DishVO dishVO = dishService.getByIdWithFlavors(id);
return Result.success(dishVO);
}
@PutMapping
@ApiOperation("更新菜品")
public Result update(@RequestBody DishDTO dishDTO){
log.info("更新菜品:{}", dishDTO);
dishService.updateWithFlavors(dishDTO);
return Result.success();
}
/**
* 根据分类id查询菜品
* @param categoryId
* @return
*/
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<Dish>> list(Long categoryId){
List<Dish> list = dishService.list(categoryId);
return Result.success(list);
}
}
添加的代码:
/**
* 根据分类id查询菜品
* @param categoryId
* @return
*/
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<Dish>> list(Long categoryId){
List<Dish> list = dishService.list(categoryId);
return Result.success(list);
}
示意图:

(2)DishService完善
位置:sky-server/src/main/java/com/sky/service/DishService.java
添加的代码:
/**
* 根据分类ID查询菜品列表
* @param categoryId
* @return
*/
List<Dish> list(Long categoryId);
示意图:

(3)DishServiceimpl完善
位置:sky-server/src/main/java/com/sky/service/impl/DishServiceimpl.java
添加的代码:
/**
* 根据分类ID查询菜品列表
* @param categoryId
* @return
*/
public List<Dish> list(Long categoryId) {
Dish dish = Dish.builder()
.categoryId(categoryId)
.status(StatusConstant.ENABLE)
.build();
return dishMapper.list(dish);
}
示意图:

(4)DishMapper.java完善
位置:sky-server/src/main/java/com/sky/mapper/DishMapper.java
添加的代码:
/**
* 查询所有菜品
* @param dish
* @return
*/
List<Dish> list(Dish dish);
示意图:

(5)DishMapper.xml完善
位置:sky-server/src/main/resources/mapper/DishMapper.xml
添加的代码:
<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>
示意图:

day3-7菜品起售停售功能
(6)DishController完善
位置:sky-server/src/main/java/com/sky/controller/admin/DishController.java
添加的代码:
/**
* 菜品起售停售
* @param status
* @param id
* @return
*/
@PostMapping("/status/{status}")
@ApiOperation("菜品起售停售")
public Result<String> startOrStop(@PathVariable Integer status, Long id){
dishService.startOrStop(status,id);
return Result.success();
}
示意图:

(7)DishService完善
位置:sky-server/src/main/java/com/sky/service/DishService.java
添加的代码:
/**
* 根据ID更新菜品状态
* @param status
* @param id
*/
void startOrStop(Integer status, Long id);
示意图:

(8)DishServiceimpl完善
位置:sky-server/src/main/java/com/sky/service/impl/DishServiceimpl.java
添加的代码:
/**
* 菜品起售停售
*
* @param status
* @param id
*/
@Transactional
public void startOrStop(Integer status, Long id) {
Dish dish = Dish.builder()
.id(id)
.status(status)
.build();
dishMapper.update(dish);
if (status == StatusConstant.DISABLE) {
// 如果是停售操作,还需要将包含当前菜品的套餐也停售
List<Long> dishIds = new ArrayList<>();
dishIds.add(id);
// select setmeal_id from setmeal_dish where dish_id in (?,?,?)
List<Long> setmealIds = setmealDishMapper.getSetmealIdsByDishIds(dishIds);
if (setmealIds != null && setmealIds.size() > 0) {
for (Long setmealId : setmealIds) {
Setmeal setmeal = Setmeal.builder()
.id(setmealId)
.status(StatusConstant.DISABLE)
.build();
setmealMapper.update(setmeal);
}
}
}
}
示意图:

(9)SetmealDishMapper.java完善
位置:sky-server/src/main/java/com/sky/mapper/SetmealDishMapper.java
添加的代码:
/**
* 根据菜品id获取套餐id
* @param dishIds
* @return
*/
List<Long> getSetmealIdsByDishIds(List<Long> dishIds);
示意图:

(10)SetmealDishMapper.xml
位置:sky-server/src/main/resources/mapper/SetmealDishMapper.xml
添加的代码:
<select id="getSetmealIdsByDishIds" resultType="java.lang.Long">
SELECT DISTINCT setmeal_id
FROM setmeal_dish
WHERE dish_id IN
<foreach collection="dishIds" item="dishId" open="(" separator="," close=")">
#{dishId}
</foreach>
</select>
示意图:

(11)SetmealMapper.java完善
位置:sky-server/src/main/java/com/sky/mapper/SetmealMapper.java
添加的代码:
/**
* 根据id修改套餐
*
* @param setmeal
*/
@AutoFill(OperationType.UPDATE)
void update(Setmeal setmeal);
示意图:

(12)SetmealMapper.xml完善
位置:sky-server/src/main/resources/mapper/SetmealMapper.xml
添加的代码:
<update id="update" parameterType="Setmeal">
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="status != null">
status = #{status},
</if>
<if test="description != null">
description = #{description},
</if>
<if test="image != null">
image = #{image},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
<if test="updateUser != null">
update_user = #{updateUser}
</if>
</set>
where id = #{id}
</update>
示意图:

(13)功能测试
调试项目(DuBug),打开前端网页菜品管理
找到以下位置,任意点击"停售"按钮,后再点击"启售",若都成功,这说明功能完成!


