java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

news2025/2/6 21:07:09

新增套餐

准备工作:

 

 

 

 

 

套餐信息分页查询

 前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进setmealDto

@GetMapping("/page")
public R page(int page,int pageSize,String name){

    Page<Setmeal> pageInfo =new Page<>(page,pageSize);
    Page<SetmealDto> dtoPage =new Page<>();

    LambdaQueryWrapper<Setmeal> queryWrapper =new LambdaQueryWrapper<>();
    //如果有传name就增加name筛选
    queryWrapper.eq(null!=name,Setmeal::getName,name);
    //按照更新时间降序
    queryWrapper.orderByDesc(Setmeal::getUpdateTime);

    setmealService.page(pageInfo,queryWrapper);
    //将装配好pageInfo 拷贝到dtoPage里 ,records 我们自行操作
    BeanUtils.copyProperties(pageInfo,dtoPage,"records");

    List<Setmeal> setmeals = pageInfo.getRecords();
    //将每页个setmeal都拷贝到setmealDto里,并且查询对应的categoryName然后封装进setmealDto,在合并成集合
    List<SetmealDto> setmealDtos = setmeals.stream().map((item) -> {

        SetmealDto setmealDto = new SetmealDto();
        BeanUtils.copyProperties(item, setmealDto);

        Long id = item.getCategoryId();
        Category category = categoryService.getById(id);
        String categoryName = category.getName();
        setmealDto.setCategoryName(categoryName);
        return setmealDto;
    }).toList();

    //将我们处理完成的集合,设置成新page的新records
    dtoPage.setRecords(setmealDtos);

    return new R(1,"分页查询成功",dtoPage);

}

套餐删除

 SetmealService:

@Override
public void removeWithDish(List<Long> ids) {
    //首先判断查询的内容有没有状态是在售的,如果在售,就抛自定异常

    LambdaQueryWrapper<Setmeal> queryWrapper =new LambdaQueryWrapper<>();
    queryWrapper.in(Setmeal::getId,ids);
    queryWrapper.eq(Setmeal::getStatus,1);
    long count=this.count(queryWrapper);

    //如果有在售的
    if (count>0){
        throw new CustomException("某个套餐正在售卖中,请停售再删除");
    }
    //根据ids删除套餐
    this.removeByIds(ids);


    //接下来我们要删除 套餐相关菜品的数据

    LambdaQueryWrapper<SetmealDish> queryWrapper1 =new LambdaQueryWrapper<>();
    queryWrapper1.in(SetmealDish::getSetmealId,ids);

    setmealDishService.remove(queryWrapper1);

}

套餐设置批量停售或者起售

因为批量跟单个访问的请求都是一个地址,我们直接做一个方法就可以了

注意,当我们封装ids成List集合的时候,必须要用@RequestParam 否则会报错

@PostMapping("/status/{status}")
public R statusChange(@PathVariable int status,@RequestParam List<Long> ids){
    //创建setmeal集合用作修改status条件
    List<Setmeal> setmeals =new ArrayList<>();
    //遍历id并携带status封装成setmeal对象然后装进集合
    for (Long id : ids) {
        Setmeal setmeal =new Setmeal();
        setmeal.setId(id);
        setmeal.setStatus(status);
        setmeals.add(setmeal);
    }

    setmealService.updateBatchById(setmeals);

    return new R(1,"修改状态成功");

}

套餐修改

通过传入的ID进行数据回显:

SetmealServiceImpl:

@Override
public SetmealDto getWithDish(Long id) {
     //先根据id查询到套餐的数据
    Setmeal setmeal = this.getById(id);
    //拷贝到SetmealDto中
    SetmealDto setmealDto =new SetmealDto();

    BeanUtils.copyProperties(setmeal,setmealDto);

    //接下来我们查询套餐里的菜品信息
    LambdaQueryWrapper<SetmealDish> queryWrapper =new LambdaQueryWrapper<>();
    queryWrapper.eq(SetmealDish::getSetmealId,id);

    List<SetmealDish> setmealDishes = setmealDishService.list(queryWrapper);

    //将菜品信息封装进 dto
    setmealDto.setSetmealDishes(setmealDishes);

    //封装完成 返回
    return setmealDto;
}

通过页面的数据,提交封装成SetmealDto类数据保存:

SetmealServiceImpl:

public void updateWithDish(SetmealDto setmealDto){
    //首先更新我们的套餐
    this.updateById(setmealDto);

    //然后我们清除原来的套餐跟菜品联系数据 封装新的数据、
    LambdaQueryWrapper<SetmealDish> queryWrapper =new LambdaQueryWrapper<>();
    queryWrapper.eq(SetmealDish::getSetmealId,setmealDto.getId());
    setmealDishService.remove(queryWrapper);

    List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();

    List<SetmealDish> setmealDishes1 = setmealDishes.stream().map((item) -> {
        //将每个setmealDish添加上套餐id
        item.setSetmealId(setmealDto.getId());
        return item;
    }).toList();

    //把新数据添加进去
    setmealDishService.saveBatch(setmealDishes1);
}

手机验证码登录

短信发送

 

 

 

 

 

 

 

 

 

 

 修改过滤器

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二维周期光栅结构的配置

摘要 复杂光学光栅结构被广泛用于多种应用&#xff0c;如光谱仪、近眼显示系统等。利用傅里叶模态法(FMM&#xff0c;或称RCWA) VirtualLab Fusion 提供了一种用于任意光栅结构严格分析的简单方法。利用图形用户界面&#xff0c;用户可以设置堆栈的几何形状&#xff0c;从而产生…

【实战】一次简单的log4j漏洞测试

更新时间&#xff1a;2021.12.19 参考文档&#xff1a;https://www.yuque.com/u8021480/crow/dg9xax 在去年log4j漏洞刚爆发的时候&#xff0c;很多平台都存在漏洞&#xff0c;当时也在第一时间在有授权的情况下对某论坛进行了渗透测试&#xff0c;结果发现存在漏洞&#xff0…

gitlabjenkins

使用容器安装gitlab 1.添加容器 docker run --detach \ --hostname 192.168.44.103 \ --publish 443:443 --publish 80:80 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab:Z \ --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ …

用javascript分类刷leetcode9.位运算(图文视频讲解)

位运算基础&#xff1a; 程序中所有的数载计算机内存中都是以二进制存储的&#xff0c;位运算就是直接对整数在内存中的二进制进行操作&#xff0c;由于直接在内存中进行操作&#xff0c;不需要转成十进制&#xff0c;因此处理速度非常快 常见位运算 x & 1 0 //判断奇偶…

领略设计模式的魅力,谈谈组合模式搭配访问者模式

组合模式&#xff08;composite&#xff09; 我们都知道文件和文件夹的概念&#xff0c;并且文件是可以存放在文件夹中&#xff0c;文件夹中也可以存放其他文件夹。需要设计一个简单的程序来实现文件夹和文件的关系。 实现思路 文件夹需要存放文件夹和文件&#xff0c;首先想到…

大恒普信携手昇思推出眼健康AI智能分析系统,为眼科医疗行业数字化转型升级助力

电子屏幕时代&#xff0c;人们的用眼强度不断增加&#xff0c;各种眼底疾病也开始广泛出现&#xff0c;如青光眼、病理性近视、糖尿病视网膜病变等&#xff0c;严重时可致盲。其实&#xff0c;对大多数眼底疾病而言&#xff0c;如果能早发现、早治疗&#xff0c;就可以很好地预…

把d盘的文件删除了,怎么恢复?d盘的文件删除了怎么找回

把d盘的文件删除了,怎么恢复&#xff1f;通常&#xff0c;我们删除d盘文件的情况是不一样的&#xff0c;可能是通过不同的方法删除的&#xff0c;针对不同的删除方式&#xff0c;那么要恢复这些文件的方法也是不同的&#xff0c;小编按删除方式和时间来给大家进行详细的讲解。 …

TensorFlow手动搭建神经网络实现鸢尾花分类

步骤 准备数据 搭建网络 定义神经网络中所有可训练参数 参数优化 嵌套循环迭代&#xff0c;with结构更新参数&#xff0c;显示当前loss 测试效果 计算当前参数前向传播后的准确率&#xff0c;显示当前acc acc/loss可视化 这里使用一个最简单的网络实现鸢尾花分类 完整代码…

一文搞定 Postman 接口自动化测试

本文适合已经掌握 Postman 基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求等基本操作。 工作环境与版本&#xff1a; Window 7&#xff08;64位&#xff09; Postman &#xff08;Chrome App v5.5.3&#xff09; P.S. 不同版本页面…

Vue中在组件中单独使用this

目录 &#x1f53d; 全局注册 &#x1f53d; 局部注册 &#x1f53d; 组件使用总结 &#x1f53d; 全局注册 1、Vue.prototype 在多个地方都需要使用但不想污染全局作用域的情况下&#xff0c;这样定义&#xff0c;在每个 Vue 实例中都可用。$ 表示这是一个在 Vue 所有实…

Allegro如何查看PCB进度百分比操作指导

Allegro如何查看PCB进度百分比操作指导 Allegro支持实时查看PCB进度百分比,让设计者实时了解设计进度,具体操作如下 选择Display-StatusUnrouted connections这里就是就剩下未完成的百分比,如果是0,代表已经完成除了可以在这里快捷的查看,也可以通过报表实现,选择Tools-r…

InstructPix2Pix: 随口修图

InstructPix2Pix Learning to Follow Image Editing Instructions是一篇非常有意思的文章&#xff0c;有意思说的是效果&#xff0c;要做出论文的效果过程并没那么顺利。首先需要微调GPT3模型&#xff0c;这个花钱花力气&#xff0c;在之前的文章里已经提过&#xff0c;可以参考…

RedisSon分布式锁 源码解析,在 java 中使用 redis + lua 做秒杀

1. RedisSon 分布式锁 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.17.0</version> </dependency>spring:profiles:active: devredis:cluster:nodes: 192…

Mac OSX 安装 MongoDB

1&#xff0c;简介 MongoDB是由C语言编写&#xff0c;开源而且基于分布式文件存储的介于关系数据库和非关系数据库之间的产品&#xff1b;在高负载的情况下&#xff0c;通过添加更多节点保证服务器性能&#xff1b;旨在为WEB应用提供可扩展的高性能数据存储解决方案&#xff1…

Copy-Paste

在2D视觉目标检测领域&#xff0c;由相似目标之间的重叠引起的拥挤是普遍存在的挑战。 文章地址&#xff1a;https://arxiv.org/pdf/2211.12110.pdf 研究者首先强调了拥挤问题的两个主要影响&#xff1a;1&#xff09;IoU置信度相关干扰&#xff08;ICD&#xff09;和2&#…

桥接模式

文章目录桥接模式1.桥接模式的本质2.何时选用桥接模式3.优缺点4.桥接模式的结构5.实现模拟消息发送MVC在桥接模式的体现桥接模式 桥接模式实质就是分离抽象和实现&#xff0c;抽象部分有多种&#xff0c;实现部分有多种&#xff0c;耦合在一起很难扩展&#xff0c;将其分离开来…

excel如何排序?两个方法汇总

排序是Excel中最常用的功能之一&#xff0c;也是数据分类和汇总操作的重要前提。excel如何排序&#xff1f;本文介绍如何给Excel里面的数据进行排序&#xff0c;方法很简单。感兴趣的朋友&#xff0c;赶紧来看看吧&#xff01; 操作环境&#xff1a; 演示机型&#xff1a;Dell …

PostgreSQL 导入 SLS,从业务到监控数据

日志服务SLS数据导入简介 日志服务SLS是云原生观测和分析平台&#xff0c;为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务是提供一站式数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。全面提升在研发、运维、运营、安全等场景的数…

web常见的攻击方式有哪些,以及如何进行防御?

一、是什么 Web攻击&#xff08;WebAttack&#xff09;是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码&#xff0c;修改网站权限&#xff0c;获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要组成部分 确保Web应用程序安全十分重…

python中的模块与包详解

目录 一.什么是模块 二.模块的导入 1.import 模块名 2.from 模块名 import 功能名 3.from 模块名 import * 4.as定义别名 模块导入总结 三.自定义模块 制作自定义模块 用pycharm演示 测试模块_ _main_ _变量的作用 演示 ‘_ _all_ _’变量 自定义模块小结 四.python中的包…