skyTakeAway-04

文章详细描述了如何在SpringBoot应用中通过API实现新增套餐、根据分类查询菜品、分页查询、删除和修改套餐的功能,包括Controller层的HTTP请求处理、Service层的业务逻辑和Mapper层的数据访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新增套餐

在新增套餐之前要实现根据分类查询菜品

根据分类id查询菜品


~~~controller
    @GetMapping("/list")
    @ApiOperation("根据分类id查询菜品")
    public Result<List<Dish>> list(Long categoryId){
        List<Dish> list = dishService.list(categoryId);
        return Result.success(list);
    }

~~~service

 List<Dish> list(Long categoryId);

~~~serviceImpl

 @Override
    public List<Dish> list(Long categoryId) {
        Dish dish = Dish.builder()
                .categoryId(categoryId)
                .status(StatusConstant.ENABLE)
                .build();
        return dishMapper.list(dish);
    }

~~~mapper

@Select("select * from dish where category_id=#{categoryId}")
    List<Dish> list(Dish dish);

新增套餐

~~~controller
     @PostMapping()
       @ApiOperation("新增菜品")
       public Result addSet(@RequestBody SetmealDTO setmealDTO){
           log.info("新增菜品:{}",setmealDTO);
           setmealService.addSet(setmealDTO);
           return Result.success();
       }

~~~service
    void addSet(SetmealDTO setmealDTO);

~~~serviceImpl
  @Transactional
    public void addSet(SetmealDTO setmealDTO) {
        Setmeal setmeal = new Setmeal();
        BeanUtils.copyProperties(setmealDTO, setmeal);

        //向套餐表插入数据
        setmealMapper.insert(setmeal);

        //获取生成的套餐id
        Long setmealId = setmeal.getId();

        List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
        setmealDishes.forEach(setmealDish -> {
            setmealDish.setSetmealId(setmealId);
        });

        //保存套餐和菜品的关联关系
        setmealDishMapper.insertBatch(setmealDishes);
    }

~~~mapper
@AotoFill(value = OperationType.INSERT)
    void insert(Setmeal setmeal);


  void insertBatch(List<SetmealDish> setmealDishes);

~~~mapperXML
<insert id="insert" parameterType="Setmeal" useGeneratedKeys="true" keyProperty="id">
        insert into setmeal
        (category_id, name, price, status, description, image, create_time, update_time, create_user, update_user)
        values (#{categoryId}, #{name}, #{price}, #{status}, #{description}, #{image}, #{createTime}, #{updateTime},
                #{createUser}, #{updateUser})
    </insert>

<insert id="insertBatch" parameterType="list">
        insert into setmeal_dish
        (setmeal_id,dish_id,name,price,copies)
        values
        <foreach collection="setmealDishes" item="sd" separator=",">
            (#{sd.setmealId},#{sd.dishId},#{sd.name},#{sd.price},#{sd.copies})
        </foreach>
    </insert>

分页查询


~~~controller

   @GetMapping("/page")
    @ApiOperation("分页查询")
    public Result page (SetmealPageQueryDTO setmealPageQueryDTO){
        log.info("分页查询:{}",setmealPageQueryDTO);
        PageResult pageResult = setmealService.pageQuery(setmealPageQueryDTO);
        return Result.success(pageResult);
    }

~~~service

 PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

~~~serviceImpl

   @Override
    public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {
        PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());
        Page page = setmealMapper.pageQuery(setmealPageQueryDTO);
        return new PageResult(page.getTotal(),page.getResult());
    }


~~~mapper

  Page<SetmealVO> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);

~~~mapperXML

 <select id="pageQuery" resultType="com.sky.vo.SetmealVO">
        select
        s.*,c.name categoryName
        from
        setmeal s
        left join
        category c
        on
        s.category_id = c.id
        <where>
            <if test="name != null">
                and s.name like concat('%',#{name},'%')
            </if>
            <if test="status != null">
                and s.status = #{status}
            </if>
            <if test="categoryId != null">
                and s.category_id = #{categoryId}
            </if>
        </where>
        order by s.create_time desc
    </select>

批量删除

~~~controller

    @DeleteMapping()
    @ApiOperation("批量删除套餐")
    public Result delete(@RequestParam List<Long> ids){
        setmealService.deleteBatch(ids);
        return Result.success();
    }

~~~service

  void deleteBatch(List<Long> ids);


~~~serviceImpl

@Override
    @Transactional
    public void deleteBatch(List<Long> ids) {
        ids.forEach(id ->{
            //判断是否再售卖中,售卖中得不可改变
            Setmeal setmeal = setmealMapper.getById(id);
            if (setmeal.getStatus()==StatusConstant.ENABLE){
                throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);
            }
        });
        ids.forEach(setmealId -> {
            //删除套餐表中的数据
            setmealMapper.deleteById(setmealId);
            //删除套餐菜品关系表中的数据
            setmealDishMapper.deleteBySetmealId(setmealId);
        });

~~~mapper

@Select("select *from setmeal where id =#{id}")
    Setmeal getById(Long id);
@Delete("delete from setmeal where id = #{id}")
    void deleteById(Long setmealId);

@Delete("delete from setmeal_dish where setmeal_id = #{setmealId}")
    void deleteBySetmealId(Long setmealId);

修改套餐

根据id查询套餐


~~~controller

  @GetMapping("/{id}")
    @ApiOperation("根据id查询套餐")

    public Result getSetById(@PathVariable Long id){
           log.info("根据id查询套餐:{}",id);
        Setmeal s = setmealService.getSetById(id);
        return Result.success(s);
    }
~~~service
  Setmeal getSetById(Long id);

~~~serviceImpl

    @Override
    public Setmeal getSetById(Long id) {
       Setmeal s= setmealMapper.getSetById(id);
       return s;
    }
~~~mapper

@Select("select * from setmeal where id = #{id}")
    Setmeal getSetById(Long id);

修改套餐

~~~controller

    @PutMapping
    @ApiOperation("修改套餐")

    public Result updateSet(@RequestBody SetmealDTO setmealDTO){
           log.info("修改套餐:{}",setmealDTO);
           setmealService.updateSet(setmealDTO);
           return Result.success();
    }

~~~service
    void updateSet(SetmealDTO setmealDTO);

~~~serviceImpl
 @Override
    public void updateSet(SetmealDTO setmealDTO) {
        Setmeal setmeal = new Setmeal();
        BeanUtils.copyProperties(setmealDTO, setmeal);

        //1、修改套餐表,执行update
        setmealMapper.update(setmeal);

        //套餐id
        Long setmealId = setmealDTO.getId();

        //2、删除套餐和菜品的关联关系,操作setmeal_dish表,执行delete
        setmealDishMapper.deleteBySetmealId(setmealId);

        List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
        setmealDishes.forEach(setmealDish -> {
            setmealDish.setSetmealId(setmealId);
        });
        //3、重新插入套餐和菜品的关联关系,操作setmeal_dish表,执行insert
        setmealDishMapper.insertBatch(setmealDishes);
    }

~~~mapper
@AotoFill(value = OperationType.UPDATE)
    void update(Setmeal setmeal);

~~~mapperXML

<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="status != null">status = #{status},</if>
            <if test="description != null">description = #{description},</if>
            <if test="image != null">image = #{image},</if>
        </set>
        where id = #{id}
    </update>

起售停售


~~~controller

   public Result startOrStop (@PathVariable Integer status, Long id){

           log.info("起售停售:{},{}",status,id);
           setmealService.startOrStop(status,id);
           return Result.success();
    }
~~~service

 void startOrStop(Integer status, Long id);

~~~serviceImpl

 @Override
    public void startOrStop(Integer status, Long id) {
        //起售套餐时,判断套餐内是否有停售菜品,有停售菜品提示"套餐内包含未启售菜品,无法启售"
        if(status == StatusConstant.ENABLE){
            //select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = ?
            List<Dish> dishList = dishMapper.getBySetmealId(id);
            if(dishList != null && dishList.size() > 0){
                dishList.forEach(dish -> {
                    if(StatusConstant.DISABLE == dish.getStatus()){
                        throw new SetmealEnableFailedException(MessageConstant.SETMEAL_ENABLE_FAILED);
                    }
                });
            }
        }

        Setmeal setmeal = Setmeal.builder()
                .id(id)
                .status(status)
                .build();
        setmealMapper.update(setmeal);
    }

~~~mapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值