当前位置: 首页 > news >正文

济源网站开发广州开发区建设局网站黄埔

济源网站开发,广州开发区建设局网站黄埔,环保网站建设说明,好搜网1. 套餐分页查询模块 1.1 需求分析 系统中的套餐数据很多的时候#xff0c;如果在一个页面中全部展示出来会显得比较乱#xff0c;不便于查看#xff0c;所以一般的系统中都会以分页的方式来展示列表数据。 在进行套餐数据的分页查询时#xff0c;除了传递分页参数以外如果在一个页面中全部展示出来会显得比较乱不便于查看所以一般的系统中都会以分页的方式来展示列表数据。 在进行套餐数据的分页查询时除了传递分页参数以外还可以传递一个可选的条件(套餐名称)。查询返回的字段中包含套餐的基本信息之外还有一个套餐的分类名称在查询时需要关联查询这个字段。 1.2 套餐分页查询时前端页面和服务端的前端页面交互过程分析 1). 访问页面(backend/page/combo/list.html)页面加载时会自动发送ajax请求将分页查询参数(page、pageSize、name)提交到服务端获取分页数据 2). 在列表渲染展示时页面发送请求请求服务端进行图片下载用于页面图片展示(已实现) 已经实现文件下载功能因此主要实现列表分页查询功能, 具体的请求信息如下: 请求说明请求方式GET请求路径/setmeal/page请求参数?page1pageSize10namexxx 1.3 套餐分页查询中基本信息查询流程 1). 构建分页条件对象 2). 构建查询条件对象如果传递了套餐名称根据套餐名称模糊查询 并对结果按修改时间降序排序 3). 执行分页查询 4). 组装数据并返回 1.4 代码编写 在查询套餐信息时, 只包含套餐的基本信息, 并不包含套餐的分类名称因此在这里查询到套餐的基本信息后, 还需要根据分类ID(categoryId)查询套餐分类名称(categoryName)并最终将套餐的基本信息及分类名称信息封装到SetmealDto中。 1.4.1 引入SetmealDto package com.itheima.reggie.dto;import com.itheima.reggie.entity.Setmeal; import com.itheima.reggie.entity.SetmealDish; import lombok.Data; import java.util.List;Data public class SetmealDto extends Setmeal {private ListSetmealDish setmealDishes;private String categoryName; }1.4.2 SetmealController中page()代码编写 package com.itheima.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.itheima.reggie.common.R; import com.itheima.reggie.dto.SetmealDto; import com.itheima.reggie.entity.Category; import com.itheima.reggie.entity.Setmeal; import com.itheima.reggie.service.CategoryService; import com.itheima.reggie.service.SetmealDishService; import com.itheima.reggie.service.SetmealService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List; import java.util.stream.Collectors; /*** Description: 套餐管理* 不仅需要保存套餐的基本信息还需要保存套餐关联的菜品数据所以需要再该方法中调用业务层方法,完成两块数据的保存。* version 1.0* date 2022/8/19 15:37*/RestController RequestMapping(/setmeal) Slf4j public class SetmealController {Autowiredprivate SetmealService setmealService;Autowiredprivate CategoryService categoryService;Autowiredprivate SetmealDishService setmealDishService;PostMapping// 页面传递的数据是json格式需要在方法形参前面加上RequestBody注解, 完成参数封装。public RString save(RequestBody SetmealDto setmealDto){/**Description: 新增套餐* version v1.0* author LiBiGo* date 2022/8/19 16:04*/log.info(套餐信息{},setmealDto);setmealService.saveWithDish(setmealDto);return R.success(新增套餐成功);}GetMapping(/page)public RPage page(int page,int pageSize,String name){/**Description: 套餐分页查询* author LiBiGo* date 2022/8/21 10:40*/// 分页构造器对象PageSetmeal pageInfo new Page(page,pageSize);PageSetmealDto dtoPage new Page();LambdaQueryWrapperSetmeal queryWrapper new LambdaQueryWrapper();// 添加查询条件根据name进行like模糊查询queryWrapper.like(name!null,Setmeal::getName,name);// 排序条件根据更新时间进行降序排序queryWrapper.orderByDesc(Setmeal::getUpdateTime);setmealService.page(pageInfo,queryWrapper);// 拷贝对象BeanUtils.copyProperties(pageInfo,dtoPage,record);ListSetmeal records pageInfo.getRecords();ListSetmealDto list records.stream().map((item) - {SetmealDto setmealDto new SetmealDto();//对象拷贝BeanUtils.copyProperties(item,setmealDto);//分类idLong categoryId item.getCategoryId();//根据分类id查询分类对象Category category categoryService.getById(categoryId);if(category ! null){//分类名称String categoryName category.getName();setmealDto.setCategoryName(categoryName);}return setmealDto;}).collect(Collectors.toList());dtoPage.setRecords(list);return R.success(dtoPage);}}1.5 功能测试 代码完善后重启服务测试列表查询我们发现, 抓取浏览器的请求响应数据我们可以获取到套餐分类名称categoryName也可以在列表页面展示出来 。 2. 删除套餐 2.1 需求分析 在套餐管理列表页面,点击删除按钮可以删除对应的套餐信息。也可以通过复选框选择多个套餐点击批量删除按钮一次删除多个套餐。 对于状态为售卖中的套餐不能删除需要先停售然后才能删除。 2.2 删除套餐时前端页面和服务端的前端页面交互过程分析 1). 点击删除, 删除单个套餐时页面发送ajax请求根据套餐id删除对应套餐 2). 删除多个套餐时页面发送ajax请求根据提交的多个套餐id删除对应套餐 开发删除套餐功能其实就是在服务端编写代码去处理前端页面发送的这2次请求即可一次请求为根据ID删除一次请求为根据ID批量删除。 观察删除单个套餐和批量删除套餐的请求信息可以发现两种请求的地址和请求方式都是相同的不同的则是传递的id个数所以在服务端可以提供一个方法来统一处理。 具体的请求信息如下 请求说明请求方式DELETE请求路径/setmeal请求参数?ids1423640210125656065,14233387650022563852.3 代码开发 在服务端的逻辑中, 删除套餐时不仅要删除套餐, 还要删除套餐与菜品的关联关系。 1). 在SetmealController中创建delete方法 /*** 删除套餐* param ids* return*/ DeleteMapping public RString delete(RequestParam ListLong ids){log.info(ids:{},ids);return R.success(套餐数据删除成功); } 2). SetmealService接口定义方法removeWithDish package com.itheima.reggie.service;import com.baomidou.mybatisplus.extension.service.IService; import com.itheima.reggie.dto.SetmealDto; import com.itheima.reggie.entity.Setmeal;import java.util.List;public interface SetmealService extends IServiceSetmeal {// 新增套餐同时需要保存套餐和菜品的关联关系public void saveWithDish(SetmealDto setmealDto);// 删除套餐同时需要删除套餐和菜菜品的关联public void removeWithDish(ListLong ids); }3). SetmealServiceImpl中实现方法removeWithDish A. 查询该批次套餐中是否存在售卖中的套餐, 如果存在, 不允许删除 B. 删除套餐数据 C. 删除套餐关联的菜品数据 代码实现 package com.itheima.reggie.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.itheima.reggie.common.CustomException; import com.itheima.reggie.dto.SetmealDto; import com.itheima.reggie.entity.Setmeal; import com.itheima.reggie.entity.SetmealDish; import com.itheima.reggie.mapper.SetmealMapper; import com.itheima.reggie.service.SetmealDishService; import com.itheima.reggie.service.SetmealService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import java.util.List; import java.util.stream.Collectors;/*** Description: new java files header..** author w* version 1.0* date 2022/8/16 10:17*/ Service Slf4j public class SetmealServiceImpl extends ServiceImplSetmealMapper, Setmeal implements SetmealService {Autowiredprivate SetmealDishService setmealDishService ;TransactionalOverridepublic void saveWithDish(SetmealDto setmealDto) {/**Description: 新增套餐同时需要保存套餐和菜品的关联关系** A. 保存套餐基本信息* B. 获取套餐关联的菜品集合并为集合中的每一个元素赋值套餐ID(setmealId)* C. 批量保存套餐关联的菜品集合** author LiBiGo* date 2022/8/19 16:10*/// 保存套餐的基本信息操作setmeal执行insert操作this.save(setmealDto);ListSetmealDish setmealDishes setmealDto.getSetmealDishes();setmealDishes.stream().map((item) - {item.setSetmealId(setmealDto.getId());return item;}).collect(Collectors.toList());// 保存套餐和菜品的关联信息操作setmeal_dish执行insert操作setmealDishService.saveBatch(setmealDishes);}OverrideTransactional// 删除套餐同时需要删除套餐和菜菜品的关联public void removeWithDish(ListLong ids) {//查询套餐状态确定是否可用删除LambdaQueryWrapperSetmeal queryWrapper new LambdaQueryWrapper();queryWrapper.in(Setmeal::getId,ids);queryWrapper.eq(Setmeal::getStatus,1);int count this.count(queryWrapper);if(count 0){//如果不能删除抛出一个业务异常throw new CustomException(套餐正在售卖中不能删除);}//如果可以删除先删除套餐表中的数据---setmealthis.removeByIds(ids);//delete from setmeal_dish where setmeal_id in (1,2,3)LambdaQueryWrapperSetmealDish lambdaQueryWrapper new LambdaQueryWrapper();lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);//删除关系表中的数据----setmeal_dishsetmealDishService.remove(lambdaQueryWrapper);} }4). 完善SetmealController代码 package com.itheima.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.itheima.reggie.common.R; import com.itheima.reggie.dto.SetmealDto; import com.itheima.reggie.entity.Category; import com.itheima.reggie.entity.Setmeal; import com.itheima.reggie.service.CategoryService; import com.itheima.reggie.service.SetmealDishService; import com.itheima.reggie.service.SetmealService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List; import java.util.stream.Collectors; /*** Description: 套餐管理* 不仅需要保存套餐的基本信息还需要保存套餐关联的菜品数据所以需要再该方法中调用业务层方法,完成两块数据的保存。* version 1.0* date 2022/8/19 15:37*/RestController RequestMapping(/setmeal) Slf4j public class SetmealController {Autowiredprivate SetmealService setmealService;Autowiredprivate CategoryService categoryService;Autowiredprivate SetmealDishService setmealDishService;PostMapping// 页面传递的数据是json格式需要在方法形参前面加上RequestBody注解, 完成参数封装。public RString save(RequestBody SetmealDto setmealDto){/**Description: 新增套餐* version v1.0* author LiBiGo* date 2022/8/19 16:04*/log.info(套餐信息{},setmealDto);setmealService.saveWithDish(setmealDto);return R.success(新增套餐成功);}GetMapping(/page)public RPage page(int page,int pageSize,String name){/**Description: 套餐分页查询* author LiBiGo* date 2022/8/21 10:40*/// 分页构造器对象PageSetmeal pageInfo new Page(page,pageSize);PageSetmealDto dtoPage new Page();LambdaQueryWrapperSetmeal queryWrapper new LambdaQueryWrapper();// 添加查询条件根据name进行like模糊查询queryWrapper.like(name!null,Setmeal::getName,name);// 排序条件根据更新时间进行降序排序queryWrapper.orderByDesc(Setmeal::getUpdateTime);setmealService.page(pageInfo,queryWrapper);// 拷贝对象BeanUtils.copyProperties(pageInfo,dtoPage,record);ListSetmeal records pageInfo.getRecords();ListSetmealDto list records.stream().map((item) - {SetmealDto setmealDto new SetmealDto();//对象拷贝BeanUtils.copyProperties(item,setmealDto);//分类idLong categoryId item.getCategoryId();//根据分类id查询分类对象Category category categoryService.getById(categoryId);if(category ! null){//分类名称String categoryName category.getName();setmealDto.setCategoryName(categoryName);}return setmealDto;}).collect(Collectors.toList());dtoPage.setRecords(list);return R.success(dtoPage);}DeleteMappingpublic RString delete(RequestParam ListLong ids){/**Description: 删除套餐* author LiBiGo* date 2022/8/21 11:35*/log.info(ids:{},ids);setmealService.removeWithDish(ids);return R.success(套餐数据删除成功);}GetMapping(/list)public RListSetmeal list(Setmeal setmeal) {log.info(setmeal:{}, setmeal);//条件构造器LambdaQueryWrapperSetmeal queryWrapper new LambdaQueryWrapper();queryWrapper.like(StringUtils.isNotEmpty(setmeal.getName()), Setmeal::getName, setmeal.getName());queryWrapper.eq(null ! setmeal.getCategoryId(), Setmeal::getCategoryId, setmeal.getCategoryId());queryWrapper.eq(null ! setmeal.getStatus(), Setmeal::getStatus, setmeal.getStatus());queryWrapper.orderByDesc(Setmeal::getUpdateTime);return R.success(setmealService.list(queryWrapper));}}3.4 功能测试 代码完善后重启服务测试套餐的删除功能主要测试以下几种情况。 1). 删除正在启用的套餐报错 2). 执行批量操作, 删除两条记录, 一个启售的, 一个停售的
http://www.zqtcl.cn/news/359613/

相关文章:

  • 金华市金东区建设局网站wordpress好看的下载页面
  • 英文网站seo发展前景成都网站开发建设推广
  • p2p网贷网站建设方案制作网站专业公司吗
  • 益阳网站建设企业房地产市场最新动态
  • 关于公司网站改版通知jmr119色带
  • 城关区建设局网站珠海中英文网站建设
  • 长春哪家做网站便宜手机英语网站
  • 应城网站建设莱芜拉呱
  • 如何建立淘宝客网站HTML网站建设课程
  • 网站建设供需chrome不安全的网站设置
  • 网站dns修改中国楼市未来发展趋势
  • 网站超级链接怎么做帮别人发广告赚钱平台
  • 做网站可以赚钱么注册做网站的公司
  • 河南省建协网官方网站建网站卖阀门
  • 医院网站怎么制作重庆安全监督工程信息网
  • 饰品网站建设规划书搭建微信网站
  • 开发网站访问流量赚钱加盟网站需要怎么做
  • 装饰协会网站源码湖南省郴州市北湖区
  • 花都网站建设价格重庆市住房和城乡建设厅网站
  • 北京住总第一开发建设有限公司网站wordpress 网站访问认证页面
  • 网站制作的管理苏州百度推广服务中心
  • 厦门建行网站首页企业展厅建筑外观
  • 重庆定制型网站建设1000套网站源码
  • 阿里云网站建设服务费会计科目安平县建设局网站
  • 网上做国外兼职网站网络编程技术实验报告
  • iis网站服务器安全隐患分析创新的合肥网站建设
  • 蛋糕网站建设方案广州网站公司推荐
  • 无锡seo公司网站广渠门做网站的公司
  • 安徽股票配资网站建设seo教程自学网
  • 网站建设酷隆做3d建模贴图找哪个网站