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

苍穹外卖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); List<ShoppingCart> 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); List<OrderDetail> 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?fromshare=blogdetail&sharetype=blogdetail&sharerId=149297251&sharerefer=PC&sharesource=2401_84162100&sharefrom=from_link

这个博主的文章解决

http://www.jsqmd.com/news/494293/

相关文章:

  • Node.js 与 npm 的安装与配置(详细教程)
  • WeKnora快速部署攻略:开箱即用,打造个人专属知识问答机器人
  • ssm+java2026年毕设社区医院综合管理信息系统【源码+论文】
  • 三电平T型逆变器仿真模型:基于MATLAB Simulink的PWM控制与无中点电位不平衡控制
  • 小白友好:Qwen3-Reranker-0.6B本地部署,轻松提升RAG检索精度
  • Jmeter实战--压测 基本流程
  • 计算机毕业设计源码:Python基于Spark与Hive的酒店大数据分析与推荐系统 Django框架 Vue 可视化 Hadoop 爬虫 协同过滤推荐算法 民宿 客栈(建议收藏)✅
  • Windows系统下SIMetrix库管理终极方案:自定义中央仓库+环境变量配置教程
  • SpringAI大语言模型应用案例:智能问答系统开发
  • Python 深度学习代码调试,图像分割代码调试,图像分割代码 1、2D医学图像分割项目
  • SPI时序模式0-3终极图解:用逻辑分析仪抓取NRF24L01与SD卡的真实波形
  • Cesium新手避坑指南:从SHP到3D城市可视化的完整实战流程(附GitHub源码)
  • 用C语言程序解决两个简单问题
  • GitHub上的R包突然安装不上的原因之一
  • UniApp+SVGA跨端动画开发避坑指南:微信小程序与H5的兼容性处理大全
  • SpringAI集成OpenAI:从配置到调用实战
  • 手把手教你用MP2144搭建超低功耗单键开关机电路(含完整代码)
  • 矩转换矩阵
  • RePKG:Wallpaper Engine资源处理的高效工具与创新方案
  • 用AutoDL+SSH+VSCode搭建深度学习环境:保姆级连麦调试教程
  • 声纳方程实战指南:如何用Python模拟水下声波传播(附代码)
  • SpringAI大语言模型调用优化:性能提升技巧
  • 一键恢复 Redis 运行与 Grafana 监控(免修改 systemd 配置)
  • DID在算法策略评估中的5个常见误区及如何避免
  • MT5零样本改写真实体验:上传中文句子,秒获多个同义变体
  • 若依框架实战:5步搞定单点登录接入,避开那些坑爹的命名陷阱
  • Xcode 12.1导出ipa包避坑指南:从证书选择到最终导出的完整流程
  • ssm+java2026年毕设社区疫苗接种和核酸检测管理【源码+论文】
  • 生产环境中部署InstructPix2Pix:高并发图像处理架构设计思路
  • 超轻量级人脸检测模型对比:Ultra-Light-Fast-Generic-Face-Detector-1MB vs MTCNN vs MobileNet