个人名片:
博主:酒徒?.本项目基于B站黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目。
专栏:瑞吉外卖
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:一些伤口之所以总会痛,那是因为你总是去摸。有一种女人像贝壳一样,外面很硬,内在其实很软。心里有一颗美丽的珍珠,却从来不轻易让人看见。
视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis
plus开发核心技术的真java实战项目】 https://www.bilibili.com/video/BV13a411q753?
点击观看
目录
- 1.提交订单
- 2.页面显示
- 3.再来一单
1.提交订单
文章图片
分析:order地址,POST方式,submit地址
注意一般情况下业务写作业务层,这里我就懒得写的,于是写在一起了。
听说公司要求写代码是,这些内容必须写在业务层service中,应该是为了方便阅读。
提交订单之后,后台回收袋订单信息,但是大部分需要根据相应的信息在数据库中查找。查找是对照页面,看需要哪些信息,避免做无用功,把所有信息都查找了一遍。组装找到的所有信息。
注意:手机端显示的订单信息与管理端不一样,管理端内容更多一些,配合管理端页面写代码。
/**
* 提交订单
* @param orders
* @param session
* @return
*/
@PostMapping("/submit")
public R submit(@RequestBody Orders orders, HttpSession session) {
//log.info("orders:{}", orders);
//orders:Orders(id=null, number=null, status=null, userId=null, addressBookId=1565321137458069506, orderTime=null, checkoutTime=null, payMethod=1, amount=null, remark=258, phone=null, address=null, userName=null, consignee=null)
//1.生成订单号
long number = IdWorker.getId();
orders.setNumber(number);
//1.1设置id为订单号为了之后再来一单方便
orders.setId(number);
//2.设置状态信息
orders.setStatus(2);
//3.设置用户iduserid
Long userId = (Long) session.getAttribute("user");
orders.setUserId(userId);
//4.设置orderTime=null, checkoutTime=null
orders.setOrderTime(LocalDateTime.now());
orders.setCheckoutTime(LocalDateTime.now());
//5.设置实收金额同时设置订单明细表
//5.1根据用户id查询购物车信息
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ShoppingCart::getUserId, userId);
List list = shoppingCartService.list(wrapper);
AtomicInteger amount = new AtomicInteger(0);
//5.2以流的形式设置每一个orderDetail信息
List orderDetailList = list.stream().map((item) -> {
OrderDetail orderDetail = new OrderDetail();
//赋值item到
//BeanUtils.copyProperties(item, orderDetail);
//orderDetail:OrderDetail(id=1568213442418528257, name=口味蛇, image=0f4bd884-dc9c-4cf9-b59e-7d5958fec3dd.jpg, orderId=null, dishId=1397851668262465537, setmealId=null, dishFlavor=热饮, number=1, amount=168.00)
//这里id不能自己设置,为了确保之后相同餐品id不重复
orderDetail.setName(item.getName());
orderDetail.setImage(item.getImage());
orderDetail.setOrderId(number);
//判断套餐还是菜品
Long dishId = item.getDishId();
if (dishId != null){
orderDetail.setDishId(item.getDishId());
}else {
orderDetail.setSetmealId(item.getSetmealId());
}
orderDetail.setDishFlavor(item.getDishFlavor());
orderDetail.setNumber(item.getNumber());
//单个金额
orderDetail.setAmount(item.getAmount());
//计算总金额
amount.addAndGet(item.getAmount().multiply(new BigDecimal(item.getNumber())).intValue());
//log.info("orderDetail:{}", orderDetail);
return orderDetail;
}).collect(Collectors.toList());
log.info("orderDetailList:{}", orderDetailList);
//5.3保存orderDetail
orderDetailService.saveBatch(orderDetailList);
//5.4将orderDetailList中每一份价格相加,注意餐品的数量number
//log.info("amount:{}", amount);
//log.info("amount.get():{}", amount.get());
//log.info("new BigDecimal(amount.get()):{}", new BigDecimal(amount.get()));
orders.setAmount(new BigDecimal(amount.get()));
//6.设置一系列备注order
//6.1根据addressBookId获取下单是设置的地址信息
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AddressBook::getId, orders.getAddressBookId());
AddressBook addressBook = addressBookService.getOne(queryWrapper);
//6.2设置手机号设置phone
String phone = addressBook.getPhone();
orders.setPhone(phone);
//6.3设置address
String detail = addressBook.getDetail();
orders.setAddress(detail);
//6.4设置userName
String userName = userService.getById(userId).getName();
orders.setUserName(userName);
//6.5设置consignee
String consignee = addressBook.getConsignee();
orders.setUserName(consignee);
//7清空购物车
shoppingCartService.remove(wrapper);
//log.info("orders:{}", orders);
ordersService.save(orders);
return R.success("下单成功");
}
2.页面显示
文章图片
分析:order地址,POST方式,userPage地址,page,pageSize属性
只显示该用户的订单信息,不要弄成数据库所有信息。
/**
* 订单页面显示
* @param page
* @param pageSize
* @return
*/
@GetMapping("/userPage")
public R page(int page, int pageSize){
//验证是否接受到信息
//log.info("page:{}", page);
//log.info("pageSize:{}", pageSize);
//页面构造器
Page pageInfo = new Page<>(page, pageSize);
//查询所有订单
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
//查询该用户的所有订单信息
queryWrapper.eq(Orders::getId, session.getAttribute("user"));
queryWrapper.orderByAsc(Orders::getOrderTime);
ordersService.page(pageInfo, queryWrapper);
return R.success(pageInfo);
}
3.再来一单
文章图片
【瑞吉外卖|猿创征文|瑞吉外卖——移动端_订单明细】分析:order地址,POST方式,again地址
注意先清空购物车。
/**
* 再来一单
* @param orders
* @param session
* @return
*/
@PostMapping("/again")
public R again(@RequestBody Orders orders, HttpSession session){
//log.info("orders:{}", orders);
//orders:Orders(id=1565321137458069506, number=null, status=null, userId=null, addressBookId=null, orderTime=null, checkoutTime=null, payMethod=null, amount=null, remark=null, phone=null, address=null, userName=null, consignee=null)
//1.根据订单id查询详细订单信息
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrderDetail::getOrderId, orders.getId());
List list = orderDetailService.list(queryWrapper);
//2.以流的形式添加每一份餐品到购物车
List shoppingCartList = list.stream().map((item) -> {
ShoppingCart shoppingCart = new ShoppingCart();
//赋值orderDetail到shoppingCart
BeanUtils.copyProperties(item, shoppingCart);
//log.info("shoppingCart:{}", shoppingCart);
//shoppingCart:ShoppingCart(id=1568512162989137922, name=口味蛇, image=0f4bd884-dc9c-4cf9-b59e-7d5958fec3dd.jpg, userId=null, dishId=1397851668262465537, setmealId=null, dishFlavor=少冰, number=1, amount=168.00, createTime=null)
//设置userId
shoppingCart.setUserId((Long) session.getAttribute("user"));
//设置createTime
shoppingCart.setCreateTime(LocalDateTime.now());
return shoppingCart;
}).collect(Collectors.toList());
//log.info("shoppingCartList:{}", shoppingCartList);
//先清空购物车根据用户id
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ShoppingCart::getUserId, (Long) session.getAttribute("user"));
shoppingCartService.remove(wrapper);
//批量保存到购物车
shoppingCartService.saveBatch(shoppingCartList);
return R.success("");
}
推荐阅读
- 瑞吉外卖|猿创征文|瑞吉外卖——移动端_笔记
- 瑞吉外卖|猿创征文|瑞吉外卖——移动端_购物车
- java|Java处理Excel(从POI到SPL)
- 云原生系列--微服务|猿创征文|Hystrix的概念与简单使用
- 数据库|2022年面试复盘大全400道(Redis+ZK+Nginx+数据库+分布式+微服务)
- 云原生小白|KubeGems 启用 Nacos 配置中心
- 测试|测开要做的开发工作到底是做什么
- java|学习记录(JAVA 基础知识错题记录①)
- ssm|基于ssm的美妆购物平台管理系统(idea+spring+springmvc+mybatis+jsp)