当前位置: 首页 > web >正文

苍穹外卖项目实战(日记十四)-记录实战教程及问题的解决方法-(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),打开前端网页菜品管理

找到以下位置,任意点击“停售”按钮,后再点击“启售”,若都成功,这说明功能完成!

http://www.xdnf.cn/news/19908.html

相关文章:

  • 机器视觉中为什么优先选择黑白相机?
  • 【Linux】为什么死循环卡不死 Linux?3 个核心逻辑看懂进程优先级与 CPU 调度密码
  • 性能测试-jmeter9-直连数据库
  • 苍穹外卖项目笔记day03
  • 从0 死磕全栈第3天:React Router (Vite + React + TS 版):构建小时站实战指南
  • 机器学习-逻辑回归
  • raspberry Pi 4B(树莓派4B)开启VNC服务 主机用VNC连接
  • 14、Docker构建后端镜像并运行
  • 关于SPI串口spidev接收数据不完整的问题
  • Moonchain:「新加坡大华银行」加持下连接现实金融与链上经济的价值通道
  • 大数据毕业设计选题推荐-基于大数据的电信客户流失数据分析系统-Hadoop-Spark-数据可视化-BigData
  • 03、Maven下载与阿里云镜像加速
  • 电子电气架构 --- 新EEA架构下开发模式转变
  • Openmanus复现教程:打造自己的Agent助手
  • Python之split - 常遇见的bug
  • Redis突然挂了,数据丢了多少?就看你用RDB还是AOF
  • Git配置:禁用全局HTTPS验证
  • LangGraph 时间旅行深度解析:掌握状态、持久化与人机协同工作流
  • SecureCRT v9.5.2 Mac SSH终端操作工具
  • 3种通过USB从电脑传输文件到iPad的方法
  • 【Luogu】P2398 GCD SUM (容斥原理求gcd为k的数对个数)
  • Ubuntu查看开机以来修改的文件
  • k8s,v1.30.4,安装使用docker
  • 嵌入式解谜日志-网络编程(udp,tcp,(while循环原理))
  • [特殊字符] 预告!我正在开发一款让自动化操作变得「像呼吸一样自然」的AI神器
  • 从静态到智能:用函数式接口替代传统工具类
  • 命令行小工具
  • Controller返回CompletableFuture到底是怎么样的
  • Ubuntu系统镜像源配置
  • 数据结构——树(03二叉树,与路径有关的问题,代码练习)