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

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

相关推荐
几个高兴4 小时前
前端、node跨域问题
数据库
该用户已不存在4 小时前
Redis到底什么,该怎么用
数据库·redis·后端
zooooooooy4 小时前
后端工程师的AI全栈之路
spring boot·trae
TG_yilongcloud4 小时前
阿里云代理商:轻量应用服务器介绍及搭建个人博客教程参考
运维·服务器·阿里云·云计算·wordpress个人博客
坚持每天敲代码4 小时前
【教程】2025 IDEA 快速创建springboot(maven)项目
java·spring boot·maven
kyle~4 小时前
计算机网络---CA证书体系(Certificate Authority)
前端·数据库·计算机网络
文人sec5 小时前
性能测试-jmeter9-直连数据库
数据库·测试工具·jmeter
叫我阿柒啊5 小时前
Java全栈工程师的面试实战:从基础到复杂问题的完整解析
java·数据库·spring boot·微服务·vue3·测试·全栈开发
窗外的寒风5 小时前
vscode炒股插件-韭菜盒子AI版
vscode·idea