苍穹外卖Day8 (地址簿 用户下单 功能支付)

发布时间:2026/7/5 20:41:58

苍穹外卖Day8 (地址簿 用户下单 功能支付) 01导入地址簿功能代码产品原型地址管理查看修改默认地址新增地址修改地址业务功能图片右侧目录接口罗列新增地址查询登录用户所有的地址查询默认地址修改地址根据id删除地址根据id查询地址设置默认地址修改地址默认字段数据库的设计(address_book表)因为是代码导入就列举这一个接口 因为是设置默认地址一个用户只能有一个默认地址所以在修改一个地址为默认地址之前先将这个用户的所有地址全部修改为非默认地址注意要添加事务Transactional 因为多表操作02用户下单模块需求分析和设计用户点餐业务流程接口设计分析接口参数的设计一般看产品原型设计接口文档订单表和订单明细表之间的关系一对多数据库表的设计订单表订单明细表代码开发DTO设计VO的设计控制层Controller层Service层 比较复杂好好看看 /** * 用户下单 * param ordersSubmitDTO * return */ Transactional Override public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) { // 1、处理业务异常地址簿为空购物车数据为空 AddressBook adderssBook addressBookMapper.getById(ordersSubmitDTO.getAddressBookId()); if(adderssBook null){ // 抛出异常 throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL); } // 查询当前用户购物车数据 Long userId BaseContext.getCurrentId(); ShoppingCart shoppingCart new ShoppingCart(); shoppingCart.setUserId(userId); ListShoppingCart shoppingCartList shoppingCartMapper.list(shoppingCart); if(shoppingCartList null || shoppingCartList.size() 0){ // 抛出购物车为空异常 throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL); } // 2、向订单表中插入一条数据 Orders orders new Orders(); BeanUtils.copyProperties(ordersSubmitDTO, orders); orders.setOrderTime(LocalDateTime.now()); // 设置订单未支付状态 orders.setPayStatus(Orders.UN_PAID); // 设置订单待支付状态 orders.setStatus(Orders.PENDING_PAYMENT); // 设置订单编号 使用当前系统的时间戳作为订单编号 orders.setNumber(String.valueOf(System.currentTimeMillis())); // 手机号从地址簿中获取 orders.setPhone(adderssBook.getPhone()); // 姓名 orders.setUserName(adderssBook.getConsignee()); orders.setUserId(userId); orderMapper.insert(orders); ListOrderDetail orderDetails new ArrayList(); // 3、向订单明细表中插入n条数据 for (ShoppingCart cart : shoppingCartList) { OrderDetail orderDetail new OrderDetail(); // 订单明细对象 BeanUtils.copyProperties(cart, orderDetail); orderDetail.setOrderId(orders.getId()); // 设置当前订单明细关联的订单id orderDetails.add(orderDetail); } // 批量插入 orderDetailMapper.insertBatch(orderDetails); // 4、清空用户购物车中的数据 shoppingCartMapper.deleteByUserId(userId); // 5、封装VO返回结果 OrderSubmitVO orderSubmitVO OrderSubmitVO.builder() .id(orders.getId()) .orderTime(orders.getOrderTime()) .orderNumber(orders.getNumber()) .orderAmount(orders.getAmount()) .build(); return orderSubmitVO; }持久层Mapper的代码不复杂就是插入字段比较多不要写重复03 订单支付微信支付介绍微信小程序的支付时序图这里貌似很重要但是我没太听懂 Day08-13 可以回看这里直接通过Java程序调用微信的那个接口所以要用到 HttpClient这个是为了解决下面这个网站就是 获取临时域名 的网站 这就是内网穿透的工具获取一个临时的公网ip步骤1、双击这个文件打开命令行窗口后面空格接着从这里复制的隧道这样就可以获取一个公网的ip前面操作只需要执行一次就可以了之后再输入下面这个命令 输入后端 的端口号这样就出现了一个域名 可以映射访问到本地那个http://localhost:8080的本地电脑的后端服务器因为无法跟着视频完成支付功能所以我看了https://blog.csdn.net/2301_80558092/article/details/149297251?fromshareblogdetailsharetypeblogdetailsharerId149297251sharereferPCsharesource2401_84162100sharefromfrom_link这个博主的文章解决

相关新闻