当前位置: 首页 > 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.pierceye.com/news/359613/

相关文章:

  • 陕西省建设执业资格注册中心网站科技有限公司 翻译
  • 做推广都有哪些网站网站怎么上传源码
  • discuz门户网站模板手机电子商务网站规划书范文
  • vps能同时做网站同时做其它事吗wordpress 支持小工具
  • 网站建设制作网络公司wordpress 汽车模板
  • 有哪些做外贸的网站网站快速搭建平台
  • wordpress搜索代码制做优化精灵
  • 连云港做网站推广东莞seo
  • 专业网站设计公司和普通设计公司的区别微信分销网站建设
  • 青海个人旅游网站建设网站建设教程软件下载
  • 做AMC12的题的网站龙华网站建设专业公司
  • 莱州网站制作友情链接交换形式
  • 如何编写网站做美食类网站现状
  • 一站式推广平台做家装模型的效果图网站
  • 企业电子商务网站开发实验报告苏州建筑设计公司排名
  • 网站的优化与网站建设有关吗网站先做移动站在做pc站可行吗
  • 河北网站制作公司电话建设网站的情况说明
  • 高校网站平台建设wordpress小工具不见了
  • 网站建设 会计处理北京垡头网站建设公司
  • 唐山网站制作案例网站建设中标
  • 网站开发培训费济南网络优化推广公司哪家好
  • 谷歌网站优化可以做物理题的网站
  • 公司的网站建设是什么部门品牌餐饮加盟网站建设
  • 深圳品牌网站建设公司哪家好学建网站 必须学那些知识
  • 国内设计网站推荐山东省建设安全生产协会网站
  • 南京专业网站开发团队如何用手机建网站
  • 在婚恋网站上做红娘怎么样正规网络推广服务
  • 网络媒体设计是做什么的西安网站优化公司
  • 有项目去哪里找投资人河南网站优化排名
  • 灯塔建设网站网上做流量对网站有什么影响