瑞吉外卖笔记day05(1)

目录

一、新增套餐

1、需求分析

 2、数据模型

 3、代码实现

1、添加菜品代码实现 

2、新增套餐代码实现 

二、套餐分页

1、代码实现

三、删除套餐,批量停/启售

1、需求分析

​编辑

2、代码开发

3、功能测试

四、修改套餐

1、需求分析

代码开发-梳理交互过程

2、代码实现 

回显代实现

 修改代码实现


一、新增套餐

1、需求分析

 2、数据模型

  • setmeal         套餐表
  • setmeal_dish 套餐菜品关系表

 3、代码实现

1、添加菜品代码实现 

    /**
     * 添加菜品并对其回显
     */
    @GetMapping("/list")
    public R<List<Dish>> list(Dish dish){
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(dish.getCategoryId()!=null,Dish::getCategoryId,dish.getCategoryId());
        //查询状态为1的,就是在启售的
        queryWrapper.eq(Dish::getStatus,1);        
queryWrapper.orderByDesc(Dish::getSort);
        List<Dish> list = dishService.list(queryWrapper);
        return R.success(list);
    }

测试成功 

2、新增套餐代码实现 

 经过调试传过来总的数据

 

SetmealService 

public interface SetmealService extends IService<Setmeal>{

    public void saveWithDish(SetmealDto setmealDto);
}

SetmealServiceImpl  

@Service
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {

    @Autowired
    private SetmealDishService setmealDishService;

    @Override
    public void saveWithDish(SetmealDto setmealDto) {
        //保存套餐的基本信息,操作setmeal,执行insert操作
        this.save(setmealDto);


        List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
        List<SetmealDish> list = setmealDishes.stream().map((item) -> {
            item.setSetmealId(setmealDto.getId());
            return item;
        }).collect(Collectors.toList());
        //保存套餐和菜品的关联信息,操作setmeal_dish,执行insert操作

        setmealDishService.saveBatch(list);

    }
}

Controller

    /**
     * 添加菜品到套餐中
     * @return
     */

    @PostMapping
    public R<String> save(SetmealDto setmealDto){
        setmealService.saveWithDish(setmealDto);
        return R.success("添加菜品到套餐中成功");
    }

测试成功

二、套餐分页

1、代码实现

 /**
     * 分页
     * 这里需要返回的事dto中的,所以想办法把dto里东西整够了
     *
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page , int pageSize,String name){
        Page<Setmeal> pageInfo = new Page<>(page,pageSize);
        Page<SetmealDto> setmealDtoPage = new Page<>();
        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(name!=null,Setmeal::getName,name);
        setmealService.page(pageInfo,queryWrapper);
        //对象拷贝,现在还缺什么?还缺records里面的信息列表
        BeanUtils.copyProperties(pageInfo,setmealDtoPage,"records");

        List<Setmeal> records = pageInfo.getRecords();
        List<SetmealDto> list = records.stream().map((item) -> {
            SetmealDto setmealDto = new SetmealDto();
            //分类id
            Long categoryId = item.getCategoryId();
            //通过id查询分类名字
            Category category = categoryService.getById(categoryId);
            if (category!=null) {
                //创建dto对象,把名字给dto
                String categoryName = category.getName();
                setmealDto.setCategoryName(categoryName);
            }
            //将其他信息拷贝到dto
            BeanUtils.copyProperties(item, setmealDto);
            return setmealDto;
        }).collect(Collectors.toList());
        setmealDtoPage.setRecords(list);
        return R.success(setmealDtoPage);


    }

测试成功 

三、删除套餐,批量停/启售

1、需求分析

2、代码开发

    /**
     * 删除套餐
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String> delete(String[] ids){
        int index=0;
        for(String id:ids) {
            Setmeal setmeal = setmealService.getById(id);
            if(setmeal.getStatus()!=1){
                setmealService.removeById(id);
            }else {
                index++;
            }
        }
        if (index>0&&index==ids.length){
            return R.error("选中的套餐均为启售状态,不能删除");
        }else {
            return R.success("删除成功");
        }
    }

    /**
     * 批量停售启售套餐
     * @param status
     * @param ids
     * @return
     */
    @PostMapping("/status/{status}")
    public R<String> sale(@PathVariable int status,String[] ids){
        for (String id:ids){
            Setmeal setmeal = setmealService.getById(id);
            setmeal.setStatus(status);
            setmealService.updateById(setmeal);
        }
        return R.success("修改成功");
    }

3、功能测试

四、修改套餐

1、需求分析

        在套餐管理列表页面点击修改按钮,跳转到修改套餐页面,在修改页面回显套餐相关信息并进行修改,最后点击确定按钮完成修改操作

代码开发-梳理交互过程

        在开发代码之前,需要梳理一下修改套餐时前端页面( add.html)和服务端的交互过程:

        1、页面发送ajax请求,请求服务端获取分类数据,用于套餐分类下拉框中数据展示

        2、页面发送ajax请求,请求服务端,根据id查询当前套餐信息,用于套餐信息回显

2、代码实现 

回显代实现

SetmealController处理Get请求

//根据Id查询套餐信息
@GetMapping("/{id}")
public R<SetmealDto> getById(@PathVariable Long id){
    SetmealDto setmealDto=setmealService.getByIdWithDish(id);

    return R.success(setmealDto);
}

SetmealServiceImpl添加getByIdWithDish方法

@Override
public SetmealDto getByIdWithDish(Long id) {
    //查询套餐基本信息
    Setmeal setmeal = this.getById(id);
    SetmealDto setmealDto = new SetmealDto();
    BeanUtils.copyProperties(setmeal, setmealDto);

    //查询套餐菜品信息
    LambdaQueryWrapper<SetmealDish> queryWrapper=new LambdaQueryWrapper<>();
    queryWrapper.eq(SetmealDish::getSetmealId,setmeal.getId());
    List<SetmealDish> list = setmealDishService.list(queryWrapper);

    setmealDto.setSetmealDishes(list);
    return setmealDto;
}

测试成功

 修改代码实现

 SetmealServiceImpl

@Override
public void updateWithDish(SetmealDto setmealDto) {
    //更新setmeal表基本信息
    this.updateById(setmealDto);

    //更新setmeal_dish表信息delete操作
    LambdaQueryWrapper<SetmealDish> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(SetmealDish::getSetmealId, setmealDto.getId());
    setmealDishService.remove(queryWrapper);

    //更新setmeal_dish表信息insert操作
    List<SetmealDish> SetmealDishes = setmealDto.getSetmealDishes();

    SetmealDishes = SetmealDishes.stream().map((item) -> {
        item.setSetmealId(setmealDto.getId());
        return item;
    }).collect(Collectors.toList());

    setmealDishService.saveBatch(SetmealDishes);
}

在SetmealController

//修改套餐
@PutMapping
public R<String> update(@RequestBody SetmealDto setmealDto){
    setmealService.updateWithDish(setmealDto);
    return R.success("修改成功");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值