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

在我的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.mzph.cn/news/109101.shtml

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

相关文章

VScode折叠代码

问题现状 代码看的我很烦, 有大段大段好像没有逻辑意义的部分,像大量的print语句, 想能不能折叠起来 在设置里面找 搜索Folding,找到Show Folding Controls, 换成always吧,一般默认是mouseover&#x…

解决js return返回结果依赖耗时操作而返回空值或undefined问题

如果js一个代码块中有耗时操作,但是return的结果可能会依赖这个耗时操作的返回,怎么解决? 一般人可能想到的方法就是async/await。 没错,正常情况下是这样的,伪代码如下: async OuterFun() { const resul…

Kotlin中循环语句

在Kotlin中,循环语句有多种形式,包括while循环、do-while循环、for循环等。下面将逐个说明每种形式的使用。 while循环: var n: Int 5 while (n > 0) {println("n$n")n-- }上述代码中,使用while循环打印n的值&…

pytorch_神经网络构建4

文章目录 循环神经网络LSTM词嵌入skip-Gram模型N-Gram模型词性预测RNN循环神经网络的基础模块实现RNN识别图片RNN时间序列预测词向量模块词向量运用N-Gram模型lstm词性预测 循环神经网络 这个网络主要用来处理序列信息,之前处理图片时大部分是分析图片的结构信息, 什么是序列信…

uniapp(uncloud) 使用生态开发接口详情(1简单的创建)

开发接口对比时间: 用java开发接口周期太长, 大概5-6个月左右 用php 开发接口周期同样太长, 大概3-4个月左右 用node.js 开发接口周期相对短一点, 大概1-2个月左右 用uniapp 开发接口, 可以不到 1-2周的时间 这里我使用 uniapp 开发接口, 废话不多说了,直接开干 HBuilder官网(…

Nginx的安装——Linux环境

1、安装gcc nginx源码的编译依赖于gcc 环境,如果没有 gcc 环境,则需要安装: yum install gcc-c 2、PCRE pcre-devel 安装 PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 htt…

【论文阅读】基于卷积神经的端到端无监督变形图像配准

📘End-to-End Unsupervised Deformable ImageRegistration with a Convolutional NeuralNetwork 📕《基于卷积神经的端到端无监督变形图像配准》 文章目录 摘要 Abstract. 1.导言 Introduction 附录 References未完待续 to be continued ... 摘要 Abstr…

分享135个游戏Python源代码总有一个是你想要的

分享135个游戏Python源代码总有一个是你想要的 链接:https://pan.baidu.com/s/1rQuDok6XRWp-7RzFAfew8w?pwd8888 提取码:8888 游戏项目名称 100%基于Python的,模仿元气骑士的游戏 Chinese Chess Xiangqi 中国象棋 Python Firefly是…

promisify 是 Node.js 标准库 util 模块中的一个函数

promisify 是 Node.js 标准库 util 模块中的一个函数。它用于将遵循 Node.js 回调风格的函数转换为返回 Promise 的函数。这使得你可以使用 async/await 语法来等待异步操作完成,从而让异步代码看起来更像同步代码。 在 Node.js 的回调风格中,函数通常接…

vue webpack/vite的区别

Vue.js 可以与不同的构建工具一起使用,其中两个主要的工具是 Webpack 和 Vite。以下是 Vue.js 与 Webpack 和 Vite 之间的一些主要区别: Vue.js 与 Webpack: 成熟度: Webpack 是一个成熟的构建工具,已经存在多年&…

C复习-声明+作用域+链接属性+存储类型

参考: 里科《C和指针》 声明 1)int short/long/signed/unsigned可以修饰类型。如果有以上的修饰,可以省略int;signed一般只用于char,因为其他整型在默认情况下是有符号数,但char是因编译器而异的。 2&am…

计算机基础知识33

进程基础(操作系统中的概念) 进程它是操作系统总最重要的概念,线程也是 进程和线程都是有操作系统来调度使用的,我们程序员是不能控制的 # 进程和程序是两码事、完全不一样 程序:其实一个死的东西、一堆代码就是程序,它也没有生命…

C++ UDP通信

#pragma once #ifndef XUDP_H #define XUDP_H#ifdef WIN32 #include <windows.h> #define socklen_t int #else #include <arpa/inet.h> #define closesocket close //替换close函数 #include <unistd.h>#include<iostream> #endifclass XUdp { pub…

源代码审计(白盒测试)

1.简介 代码安全测试是从安全的角度对代码进行安全测试评估 2.测试的方法 人工审核和静态分析工具辅助进行 人工审核&#xff1a;既能解决内部问题也能解决外部问题。是目前最有效率的解决方案&#xff0c;并且在理论上手工代码审核是非常有效的&#xff0c;但人工审核的效率不…

element表格实现单选框

利用checkbox来实现表格单选,思路就是将checkbox的值绑定到当前行mainFlag,定义checkbox的change事件,每当值改变时将上次选中的行数据mainFlag改给false <template><el-table:data"tableData"style"width: 100%"><el-table-column label&q…

视频推拉流/直播点播平台EasyDSS分享的链接提示“无信号”,该如何解决?

视频直播点播平台EasyDSS可支持用户自行上传视频文件&#xff0c;也可将上传的点播文件作为虚拟直播进行播放。平台能支持多屏播放&#xff0c;可兼容Windows、Android、iOS、Mac等操作系统&#xff0c;还能支持CDN转推&#xff0c;具备较强的可拓展性与灵活性。 为给用户提供更…

Git 提交规范

遇到的问题 在项目中采用 git 管理代码版本时&#xff0c;突然不能进行提交&#xff08;git commit&#xff09;。 报错信息如下&#xff1a; ERROR invalid commit message format. Proper commit message format is required for automated changelog generation. Git 规范…

AI 浪潮下的创业故事(一)—— Jina AI

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

SaaS 完整指南

什么是软件即服务 (SaaS)&#xff1f; 软件即服务 (SaaS) 是云计算的三个组成部分之一&#xff0c;是一种软件分发模型&#xff0c;其中第三方提供商托管应用程序&#xff0c;最终用户可以通过 Internet 访问软件。 SaaS 应用程序开发使组织无需在自己的计算机或自己的数据中…

CentOS7 内核升级

1.linux内核版本说明 https://en.wikipedia.org/wiki/Linux_kernel_version_history The Linux Kernel Archives - Releases