苍穹外卖项目实战(日记十四)-记录实战教程及问题的解决方法-(day3课后作业) 菜品停售启售功能
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 {@Autowiredprivate 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_idFROM setmeal_dishWHERE 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),打开前端网页菜品管理
找到以下位置,任意点击“停售”按钮,后再点击“启售”,若都成功,这说明功能完成!