看了我项目中购物车、订单、支付一整套设计,同事也开始悄悄模仿了...

news2025/1/16 4:52:13

在我的mall电商实战项目中,有着从商品加入购物车到订单支付成功的一整套功能,这套功能的设计与实现对于有购物需求的网站来说,应该是一套通用设计了。今天给大家介绍下这套功能设计,涵盖购物车、生成确认单、生成订单、取消订单以及支付成功回调等内容,希望对大家有所帮助!

mall项目简介

这里还是简单介绍下mall项目吧,mall项目是一套基于 SpringBoot + Vue + uni-app 的电商系统(Github标星60K),采用Docker容器化部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能,功能很强大!

  • 项目地址:https://github.com/macrozheng/mall
  • 官方文档:https://www.macrozheng.com

后台管理系统演示

前台商城项目演示

功能设计

这里介绍下从商品加入购物车到订单支付成功的整个流程,涵盖流程的示意图和效果图。

流程示意图

以下是从商品加入购物车到订单支付成功的流程图。

流程效果图

以下是从商品加入购物车到订单支付成功的效果图,可以对照上面的流程示意图查看。

数据库设计

为了支持以上购物流程,整个订单模块的数据库设计如下。

设计要点

接下来介绍下整个购物流程中的一些设计要点,涵盖加入购物车、生成确认单、生成订单、取消订单以及支付成功回调等内容。

加入购物车

功能逻辑

用户将商品加入购物车后,可以在购物车中查看到商品。购物车的主要功能就是存储用户选择的商品信息及计算购物车中商品的优惠。

购物车优惠计算流程

相关注意点
  • 购物车中商品优惠金额不会在购物车中体现,要在生成确认单时才会体现;
  • 由于商品优惠都是以商品为单位来设计的,并不是以sku为单位设计的,所以必须以商品为单位来计算商品优惠;
  • 代码实现逻辑可以参考mall项目中OmsPromotionServiceImpl类的calcCartPromotion方法。

生成确认单

功能逻辑

用户在购物车页面点击去结算后进入生成确认单页面。确认单主要用于用户确认下单的商品信息、优惠信息、价格信息,以及选择收货地址、选择优惠券和使用积分。

生成确认单流程

相关注意点
  • 总金额的计算:购物车中所有商品的总价;
  • 活动优惠的计算:购物车中所有商品的优惠金额累加;
  • 应付金额的计算:应付金额=总金额-活动优惠;
  • 代码实现逻辑可以参考mall项目中OmsPortalOrderServiceImpl类的generateConfirmOrder方法。

生成订单

功能逻辑

用户在生成确认单页面点击提交订单后生成订单,可以从订单详情页查看。生成订单操作主要对购物车中信息进行处理,综合下单用户的信息来生成订单。

下单流程

相关注意点
  • 库存的锁定:库存从获取购物车优惠信息时就已经从pms_sku_stock表中查询出来了,lock_stock字段表示锁定库存的数量,会员看到的商品数量为真实库存减去锁定库存;
  • 优惠券分解金额的处理:对全场通用、指定分类、指定商品的优惠券分别进行分解金额的计算:
    • 全场通用:购物车中所有下单商品进行均摊;
    • 指定分类:购物车中对应分类的商品进行均摊;
    • 指定商品:购物车中包含的指定商品进行均摊。
  • 订单中每个商品的实际支付金额计算:原价-促销优惠-优惠券抵扣-积分抵扣,促销优惠就是购物车计算优惠流程中计算出来的优惠金额;
  • 订单号的生成:使用Redis来生成,生成规则:8位日期+2位平台号码+2位支付方式+6位以上自增id;
  • 优惠券使用完成后需要修改优惠券的使用状态;
  • 代码实现逻辑可以参考mall项目中OmsPortalOrderServiceImpl类的generateOrder方法。

取消订单

功能逻辑

订单生成之后还需开启一个延时任务来取消超时的订单,用户也可以在订单未支付的情况下直接取消订单。

订单取消流程

相关注意点
  • 代码实现逻辑可以参考mall项目中OmsPortalOrderServiceImpl类的cancelOrder方法。

支付成功回调

功能逻辑

前台用户订单支付完成后,第三方支付平台需要回调支付成功接口。

支付成功回调流程

相关注意点
  • 代码实现逻辑可以参考mall项目中OmsPortalOrderServiceImpl类的paySuccess方法。

总结

今天给大家介绍了mall项目中整套购物流程的功能设计,其实对于很多网站来说都需要这么一套功能,说它是通用功能也不为过。从本文中大家可以看到,mall项目的整套购物流程设计的还是比较严谨的,考虑到了方方面面,如果你对mall项目整套购物流程实现感兴趣的话可以学习下mall项目的代码。

项目源码地址

https://github.com/macrozheng/mall

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Proteus仿真】【Arduino单片机】LED

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LED等。 主要功能: 系统运行后,LED花样显示。 二、软件设计 /* 作者:嗨小易(QQ:3…

Arcgis聚合工具——实现简单的升尺度

找到Aggregate工具 按如下设置进行操作 注意:如有需要对应的低分辨率影像,必须点开右下角环境Environments选项,进行栅格的捕捉选项设置,以防止升尺度后的影像与需对应的低分辨率影像的栅格单元存在偏移。 点击OK,即可…

Linux CentOS 8(网卡的配置与管理)

Linux CentOS 8(网卡的配置与管理) 目录 一、项目介绍二、命令行三、配置文件四、图形画界面的网卡IP配置4.1 方法一4.2 方法二 一、项目介绍 Linux服务器的网络配置是Linux系统管理的底层建筑,没有网络配置,服务器之间就不能相互…

内核IO栈 | IO缓冲区的向下传递过程

最近遇到个这么一个事,查阅SCSI手册,对于READ(10)命令,似乎在采用DMA的情况下,下发的SCSI命令中,并没有内存空间的地址和长度: 也就是说,单纯从这一个命令中,我们并不知道将数据从硬…

MyBatis源码初始

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: MyBatis源码解读 ✨特色专栏&#xff…

首饰上亚马逊合规认证RSL报告

首饰 首饰是一种古老而又流行的装饰品,它们不仅可以点缀女性的美丽,还可以表达个人的品味和风格。首饰的种类繁多,有耳环、项链、手镯、戒指等,每一种都有自己的特点。 随着人们对珠宝首饰的要求越来越高,为了确保珠宝…

uni-app小程序使用DCloud(插件市场)流程

一、DCloud(插件市场) DCloud 是uni-app官方插件市场,里面有官方、团队、个人发布的众多插件,包括uni-ui、uni-pay 等。而像uni-ui这种大型组件库都有官方文档可参考,但一些团队或个人发布的小型插件没有文档&#xf…

Python调用c++生成的dll

Python调用c生成的dll 1.简单例子1.1 vs2019 c生成dll1.2 Python端调用 2.调用c类生成的dll2.1 vs cpp端生成dll2.2 Python端调用 参考文献 1.简单例子 1.1 vs2019 c生成dll 项目中添加add.cpp文件 extern "C" int __declspec(dllexport) add(int x, int y) {retu…

SpringBoot + Disruptor 实现特快高并发处理,支撑每秒 600 万订单无压力!

背景 工作中遇到项目使用Disruptor做消息队列,对你没看错,不是Kafka也不是rabbitmq。Disruptor有个最大的优点就是快,还有一点它是开源的哦,下面做个简单的记录。 Disruptor介绍 Disruptor 是英国外汇交易公司LMAX开发的一个高…

中国式复杂报表制作工具及技巧,解决90%效率问题

最大的数据杀手——中国式复杂报表 作为资料人,在日常生活和工作之中,我们是否经常被要求制作如下图所示的一些数据统计表格: 总的来看,很多人经常发现自己虽然有数据,却不知道用什么图表来进行数据最佳形式的价值表…

「我在淘天做技术」一篇文章告诉你商品团队在做哪些有意思的事?

作者:许令波(君山) 近期淘天集团秋季 2024 届校园招聘正式启动,预计将发放 2000 多个 offer,其中技术类岗位占比超过 50%。为了方便大家更真实地了解淘天技术的布局和现状,我们策划了「我在淘天做技术」系列,首次全面分享淘天技术…

【限时优惠】RHCE9.0培训考证-红帽官方授权中心

【微|信|公|众|号:厦门微思网络】 官网: www.xmws.cn 相信关注红帽认证的小伙伴都已经知道了:2022 年 5 月 18 日,红帽公司宣布推出红帽企业 Linux 9 (RHCE 9),这是世界领先的企业 Linux 平台的最新版本。 特别提醒的是…

怎样成功部署CRM销售管理系统?

部署CRM销售管理系统可以是自上而下的落实,也可以自下而上让基层员工提出他们的建议,毕竟他们才是系统的使用者。成功部署CRM销售管理系统离不开以下几点要素: 1、全渠道沟通 在通讯技术发达的今天,人们可以在任何地方进行视频通…

Unity3D Shader新手入门教程:3D溶解与腐蚀特效详解

引言 在游戏开发中,特效是非常重要的一部分,它能够增加游戏的趣味性和可玩性。其中,Shader特效是一种非常常见和常用的特效,它能够通过改变物体表面的渲染方式来实现各种各样的特效效果。本文将详细介绍Unity3D中的Shader 3D溶解与…

华为云应用中间件DCS系列—Redis实现(电商网站)秒杀抢购示例

云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:应用中间件系列之Redis实现(电商网站)秒杀抢购示例 1 什么是DEVKIT 华为云开发者插件(Huawei Cloud Toolkit)&…

游戏设计模式专栏(十二):在Cocos游戏开发中运用代理模式

点击上方亿元程序员关注和★星标 引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 代理模式&#xff08…

【Tomcat】为Tomcat服务配置本地Apr库以提升性能

关于 apr 和 apr-util 对 Tomcat 服务的性能提升的说明: 要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本…

el-pagination怎么修改样式,分页修改样式

/* 分页距离右边20,距离底边20 */ .pagination-container .el-pagination{position:absolute;right:20px;bottom:20px;} 自己写一个分页组件,用到绝对定位和相对定位

Cornerstone for Mac:高效SVN管理的黄金标准

在当今的软件开发领域,版本控制系统是不可或缺的一部分。其中,Subversion(SVN)是一个广泛使用的版本控制系统,有助于团队协同工作,实现代码的版本管理和追踪。对于Mac用户来说,Cornerstone是一款…

PLC寄存器基础知识

这篇博客介绍的内容其实是微机原理的相关知识,如果没有修过微机原理,可以找相关书籍看一看,众所知周PLC也是属于微控制器。下面我们看下西门子PLC常用的寄存器地址关系。 1、西门子寄存器地址关系 待续......