SpringBoot+SSM项目实战 苍穹外卖(4) day4作业

本文详述了使用SpringBoot开发外卖项目套餐管理模块的过程,包括新增套餐、套餐分页查询、删除套餐、修改套餐及起售停售功能。详细介绍了各个功能的Controller、Service和Mapper层实现,以及接口测试和数据库验证。

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

继续上一节的内容,本节是作业课程,要求独立完成套餐管理模块所有业务功能,包括:新增套餐、套餐分页查询、删除套餐、修改套餐、起售停售套餐。

新增套餐

页面原型:

请添加图片描述

其中的文件上传、和套餐分类查询已经完成。套餐分类查询的接口地址为/admin/category/list,根据请求参数的type值区分查询的分类类型:1为菜品分类,2为套餐分类,这里前端查询的是套餐分类。这些功能前面已经完成不再赘述。

请添加图片描述

在新增套餐时需要选择套餐里包含的菜品,所以需要先完成根据分类id查询菜品功能。

根据分类id查询菜品功能

根据分类id查询菜品接口:

请添加图片描述

先来完成根据分类id查询菜品:

Controller层

DishController.java

/**
 * 根据分类id查询菜品
 *
 * @param categoryId
 * @return
 */
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<Dish>> getByCategory(Long categoryId){
   
   
    log.info("根据分类id查询菜品:{}", categoryId);
    List<Dish> list = dishService.getByCategoryID(categoryId);
    return Result.success(list);
}

Service层实现类

DishServiceImpl.java

/**
 * 根据分类id查询菜品信息
 *
 * @param categoryId
 */
public List<Dish> getByCategoryID(Long categoryId) {
   
   
    Dish dish = Dish.builder()
            .categoryId(categoryId)
            .status(StatusConstant.ENABLE) // 新增套餐需要保证查询的菜品为销售状态
            .build();
    return dishMapper.list(dish);
}

Mapper层

DishMapper直接写一个动态条件查询菜品,后期用户端前端查询菜品时也还可以复用

/**
 * 动态条件查询菜品
 * @param dish
 * @return
 */
List<Dish> list(Dish dish);

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>

完成之后测试新增套餐时往套餐中加入菜品:

请添加图片描述

按道理来说,这里前端写了输入菜品名称进行搜索的,后端应该开发出动态条件查询菜品的功能,输入数据是分类id还有菜品名等,但是这里因为前后端的接口文档里这个接口只传入了一个分类id,因此这里新增套餐页面的添加菜品里的按名称进行搜索也是无法使用的,有兴趣的可以自己修改前端源码修改接口。

新增套餐功能

新增套餐接口:

请添加图片描述

下面来完成新增套餐:

Controller层

SetmealController

/**
 * 套餐管理
 */
@RestController
@RequestMapping("/admin/setmeal")
@Slf4j
@Api(tags= "套餐相关接口") //描述类的作用
public class SetmealController {
   
   
    @Autowired
    private SetmealService setmealServices;

    /**
     * 新增套餐
     *
     * @param setmealDTO
     * @return
     */
    @PostMapping
    @ApiOperation(value = "新增套餐")
    public Result save(@RequestBody SetmealDTO setmealDTO){
   
   
        log.info("新增套餐:{}",setmealDTO);
        setmealServices.save(setmealDTO);
        return Result.success();
    }
}

Service层实现类

SetmealServiceImpl

@Service
public class SetmealServiceImpl implements SetmealService {
   
   

    @Autowired
    private SetmealMapper setmealMapper;

    @Autowired
    private SetmealDishMapper setmealDishMapper;

    /**
     * 新增套餐,同时需要保存套餐和菜品的关联关系
     *
     * @param setmealDTO
     * @return
     */
    @Transactional // 事务
    public void save(SetmealDTO setmealDTO) {
   
   
        Setmeal setmeal = new Setmeal();
        BeanUtils.copyProperties(setmealDTO, setmeal); //套餐
        List<SetmealDish> setmealDishlist = setmealDTO.getSetmealDishes(); // 套餐菜品关系

        setmealMapper.insert(setmeal);

        long setmealId = setmeal.getId(); //返回自动生成的套餐菜品表主键id

        if (setmealDishlist != null && setmealDishlist.size() > 0) {
   
   
            setmealDishlist.forEach(setmealDish -> {
   
   
                setmealDish.setSetmealId(setmealId);
            });
            //向套餐菜品关系表插入n条数据
            setmealDishMapper.insertBatch(setmealDishlist);
        }
    }
}

Mapper层

SetmealMapper

/**
 * 新增套餐数据
 *
 * @param setmeal
 */
@AutoFill(OperationType.INSERT) // 公共字段填充
void insert<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值