苍穹外卖Day04

套餐管理

根据分类id查询菜品接口

  public Result<List<Dish>> list(Long categoryId){
        List<Dish> list = dishService.list(categoryId);
        return Result.success(list);
    }
public List<Dish> list(Long categoryId) {
        Dish dish = Dish.builder().
                categoryId(categoryId).
                status(StatusConstant.ENABLE).build();
        return dishMapper.list(dish);
    }
<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>

新增套餐

public Result save(@RequestBody SetMealDTO setMealDTO){
        log.info("新增套餐:{}",setMealDTO);
        setMealService.saveWithDish(setMealDTO);
        return Result.success();
    }
public void saveWithDish(SetMealDTO setMealDTO) {
        SetMeal setMeal=new SetMeal();
        BeanUtils.copyProperties(setMealDTO,setMeal);
        //套餐状态默认为禁用状态0
        setMealDTO.setStatus(StatusConstant.DISABLE);
        setMealMapper.insert(setMealDTO);
        Long setMealId=setMeal.getId();
        //向菜品插入n条数据
        List<SetmealDish>setmealDishes=setMealDTO.getSetmealDishes();
        if (setmealDishes != null && setmealDishes.size() > 0 ){
            setmealDishes.forEach(setmealDish -> {
                setmealDish.setSetmealId(setMealId);
            });
            setMealDishMapper.insertBatch(setmealDishes);
        }
    }
 <insert id="insertBatch">
        insert into setmeal_dish(setmeal_id, dish_id, name, price, copies) values
        <foreach collection="setmealDishes" item="setmealDish" separator=",">
        (#{setmealDish.setmealId},#{setmealDish.dishId},#{setmealDish.name},#{setmealDish.price},#{setmealDish.copies})
        </foreach>
    </insert>

套餐分页查询

public Result<PageResult> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO){
        log.info("套餐分页查询:{}",setmealPageQueryDTO);
        PageResult pageResult=setmealService.pageQuery(setmealPageQueryDTO);
        return Result.success(pageResult);
    }
public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {
        PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());
        Page<SetmealVO> page=setMealMapper.pageQuery(setmealPageQueryDTO);
        return new PageResult(page.getTotal(),page.getResult());
    }
<select id="pageQuery" resultType="com.guslegend.vo.SetmealVO">
        select setmeal.*,category.name as categoryName from setmeal left join category on
        setmeal.category_id = category.id
        <where>
            <if test="name != null ">
                and setmeal.name like concat('%',#{name},'%')
            </if>
            <if test="categoryId != null">
                and setmeal.category_id = #{categoryId}
            </if>
            <if test="status != null">
                and setmeal.status = #{status}
            </if>
        </where>
    </select>

这里为什么要用SetmealVO类?如下图所示,没有使用VO就等不得套餐分类

对比entity和vo我们可以知道,Setmeal里面有一个categoryName分类名称,故要用vo类

启售停售套餐

@PostMapping("/status/{status}")
@ApiOperation("启售停售套餐")
public Result startOrStop(@PathVariable Integer status,Long id) {
log.info("启售停售套餐:{},{}", status, id);
setmealService.startOrStop(status, id);
return Result.success();
}
public void startOrStop(Integer status, Long id) {
        Setmeal setmeal = Setmeal.builder()
                .status(status)
                .id(id)
                .build();
        setMealMapper.update(setmeal);
    }
  <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="image != null ">image = #{image},</if>
            <if test="description != null ">description = #{description},</if>
            <if test="status != null ">status = #{status},</if>
            <if test="updateTime != null ">update_time = #{updateTime},</if>
            <if test="updateUser != null ">update_user = #{updateUser},</if>
        </set>
        where id = #{id}
    </update>

删除套餐

 public Result delete(@RequestParam List<Long> ids) {
        log.info("根据id批量删除套餐:{}", ids);
        setmealService.deleteBtach(ids);
        return Result.success();
    }
@Transactional
    public void deleteBtach(List<Long> ids) {
        //判断当前套餐是否在启售中,启售中不能删除
        for (Long id : ids) {
            Setmeal setmeal = setMealMapper.getById(id);
            if (setmeal.getStatus() == StatusConstant.ENABLE){
                throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);
            }
        }
        //删除套餐表里的套餐
        setMealMapper.deleteByIds(ids);
        //删除套餐菜品表里的菜品
        setMealDishMapper.deleteByDishIds(ids);
    }
    <delete id="deleteByDishIds">
        delete from setmeal_dish where setmeal_id in
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>
    <select id="getById" parameterType="Long" resultType="com.guslegend.entity.Setmeal">
        SELECT * FROM setmeal WHERE id = #{id}
    </select>

    <delete id="deleteByIds">
        delete from setmeal where id in
        <foreach collection="ids" separator="," item="id" open="(" close=")">
            #{id}
        </foreach>
    </delete>

根据ID查询套餐

  public Result<SetmealVO> getBySetmealId(@PathVariable Long id) {
        log.info("根据id查询套餐:{}", id);
        SetmealVO setmealVOs = setmealService.getById(id);
        return Result.success(setmealVOs);
    }
public SetmealVO getById(Long id) {
        Setmeal setmeal = setMealMapper.getById(id);
        //根据id查询对应菜品
        List<SetmealDish> setmealDishs = setMealDishMapper.getBySetmealId(id);
        //将结果封装到VO
        SetmealVO setmealVO = new SetmealVO();
        BeanUtils.copyProperties(setmeal,setmealVO);
        setmealVO.setSetmealDishes(setmealDishs);
        return setmealVO;
    }
  <select id="getBySetmealId" parameterType="Long" resultType="com.guslegend.entity.SetmealDish">
        SELECT * FROM setmeal_dish WHERE setmeal_id = #{setmealId}
    </select>

修改套餐

public Result update(@RequestBody SetmealDTO setmealDTO){
        log.info("修改套餐:{}",setmealDTO);
        setmealService.update(setmealDTO);
        return Result.success();
    }
public void update(SetmealDTO setmealDTO) {
        Setmeal setmeal = new Setmeal();
        BeanUtils.copyProperties(setmealDTO,setmeal);
        //修改套餐
        setMealMapper.update(setmeal);
        List<Long> ids = new ArrayList<>();
        ids.add(setmealDTO.getId());
        //删除原有的菜品
        setMealDishMapper.deleteByDishIds(ids);
        List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
        //插入套餐对应的菜品
        if (setmealDishes != null && setmealDishes.size() > 0){
            setmealDishes.forEach(setmealDish -> {
                setmealDish.setSetmealId(setmealDTO.getId());
            });
        }
        //批量插入菜品
        setMealDishMapper.insertBatch(setmealDishes);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值