基于SSM的订餐系统

您所在的位置:网站首页 如何在网上订餐 基于SSM的订餐系统

基于SSM的订餐系统

2024-07-12 02:05| 来源: 网络整理| 查看: 265

在这里插入图片描述 在这里插入图片描述

新增套餐

需求分析:

后台系统可以管理套餐系统,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在客户端会按照套餐分类来展示对应的套餐。

数据模型: 新增套餐,就是将新增页面录入的套餐信息插入到setmeal表,还需要向setmeal_dish表插入套餐和菜品关联数据,所以在新增套餐时,涉及两个表。

代码开发-准备工作: 实体类 Setmeal、SetmealDish DTO SetmealDto Mapper接口 SetmealMapper、SetmealDishMapper Service接口 SetmealService、SetmealDishService Service实现类:SetmealServiceImpl、SetmealDishServiceImpl 控制层:SetmealController

交互过程: 1.页面发送ajax请求,请求服务端获取套餐分类数据并展示到下拉框 (前文已做) 2.页面发送ajax请求,请求服务端获取菜品分类并展示到菜品窗口中 3.页面发送ajax请求,根据菜品分类查询对应的菜品数据并展示到添加菜品窗口中 4.页面发送请求进行图片上传,请求服务端将图片保存到服务端(前文已做) 5.页面发送请求进行图片下载,将上传的图片进行回显(前文已做) 6.点击保存按钮,发送ajax请求,将套餐相关数据以json形式提交到服务端

代码开发: 1.页面发送ajax请求,请求服务端获取套餐分类数据并展示到下拉框 (前文已做)

@GetMapping("/list") //type=2 public R getCategoryList(Category category){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(category.getType()!=null,Category::getType,category.getType()); queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime); List list = categoryService.list(queryWrapper); return R.success(list); }

2.页面发送ajax请求,请求服务端获取菜品分类并展示到菜品窗口中

@GetMapping("/list")//type=1 public R getCategoryList(Category category){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(category.getType()!=null,Category::getType,category.getType()); queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime); List list = categoryService.list(queryWrapper); return R.success(list); }

3.页面发送ajax请求,根据菜品分类查询对应的菜品数据并展示到添加菜品窗口中

/** * 根据分类id查对应的菜品数据 * @param dish * @return */ @GetMapping("/list") public R list(Dish dish){ Long categoryId = dish.getCategoryId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(dish.getCategoryId()!=null,Dish::getCategoryId,dish.getCategoryId()); queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime); List list = dishService.list(queryWrapper); return R.success(list); }

4.页面发送请求进行图片上传,请求服务端将图片保存到服务端(前文已做) 5.页面发送请求进行图片下载,将上传的图片进行回显(前文已做)

@Slf4j @RestController @RequestMapping("/common") public class CommonController { @Value("${reggie.path}") private String basePath; //动态获取保存的地址 /** * 文件上传 */ @PostMapping("/upload") public R upload(MultipartFile file){ //此处参数名要与前端发送的一致 //使用UUID重新生成文件名称,防止文件名称重复 String uuid = UUID.randomUUID().toString().replaceAll("-", ""); // 获得文件原始名称 String fileName = file.getOriginalFilename(); // 获得文件后缀名称 String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); // 生成最新的uuid文件名称 String newFileName = uuid + "."+ suffixName; //创建一个目录文件 File saveFile = new File(basePath); if(!saveFile.exists()){ //目录不存在,创建该目录 saveFile.mkdirs(); } //file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除 try { //将临时文件转存到指定位置 file.transferTo(new File(basePath + newFileName)); } catch (IOException e) { e.printStackTrace(); } return R.success(newFileName); } /** * 文件下载 */ @GetMapping("/download") public void download(String name, HttpServletResponse response){ try { //输入流,通过输入流读取文件内容 FileInputStream fileInputStream = new FileInputStream(new File(basePath+name)); //输出流,通过输出流写回浏览器,在浏览器展示图片 ServletOutputStream outputStream = response.getOutputStream(); response.setContentType("image/jpeg"); byte[] bytes = new byte[1024]; int len=0; while ((len = fileInputStream.read(bytes))!=-1){ outputStream.write(bytes,0,len); outputStream.flush(); } //关闭资源 outputStream.close(); fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } }

6.点击保存按钮,发送ajax请求,将套餐相关数据以json形式提交到服务端 Setmeal:

/** * 套餐 */ @Data public class Setmeal implements Serializable { private static final long serialVersionUID = 1L; private Long id; //分类id private Long categoryId; //套餐名称 private String name; //套餐价格 private BigDecimal price; //状态 0:停用 1:启用 private Integer status; //编码 private String code; //描述信息 private String description; //图片 private String image; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @TableField(fill = FieldFill.INSERT) private Long createUser; @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; //是否删除 private Integer isDeleted; }

SetmealDish:

** * 套餐菜品关系 */ @Data public class SetmealDish implements Serializable { private static final long serialVersionUID = 1L; private Long id; //套餐id private Long setmealId; //菜品id private Long dishId; //菜品名称 (冗余字段) private String name; //菜品原价 private BigDecimal price; //份数 private Integer copies; //排序 private Integer sort; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @TableField(fill = FieldFill.INSERT) private Long createUser; @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; //是否删除 private Integer isDeleted; }

SetmealDto:

@Data public class SetmealDto extends Setmeal { private List setmealDishes; private String categoryName; }

SetmealController:

@PostMapping() public R save(@RequestBody SetmealDto setmealDto){ setmealService.saveWithSetmealDishes(setmealDto); return R.success("添加成功"); }

SetmealService:

public interface SetmealService extends IService { public void saveWithSetmealDishes(SetmealDto setmealDto); }

SetmealServiceImpl:

@Override public void saveWithSetmealDishes(SetmealDto setmealDto) { //保存套餐基本信息 this.save(setmealDto); //保存套菜中菜品信息 //菜品信息 List setmealDishes = setmealDto.getSetmealDishes(); //将套餐分类id加入 setmealDishes = setmealDishes.stream().map((item)->{ Long setmealId = setmealDto.getId(); item.setSetmealId(setmealId); return item; }).collect(Collectors.toList()); setmealDishService.saveBatch(setmealDishes); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3