电商 APP 下单页(俗称车2) 业务流程概要设计

购物车是电商APP的一个关键功能点,一般购物车包含 3~4 个页面,分别是:

1.购物车的商品列表页
2.商品下单页
3.订单付款页面
4.订单付款成功页面

由于现有购物车逻辑相对混乱,这里重新整理一下商品下单页的业务流程设计

1.生成订单

这里在业务层面把订单的生命周期划分为4个阶段,分别是:

  • 订单的初始阶段
  • 订单的完备阶段
  • 订单的支付阶段
  • 订单的服务阶段

1.1 订单的初始阶段

订单的初始阶段是在 购物车商品列表页开始的,订单的初始阶段确定了商品的种类各个商品的初始数量
此时订单金额只包含 货品的总金额。在后续订单的完备阶段,因为有修改货品数量、运费、服务增值、优惠活动等,订单金额和商品数量还会继续变动。
PS. 在这里,商品的种类 包括 商品的类别、具体型号、配置(比如笔记本电脑->型号->配置->颜色)在加入购物车时就已经确定了。

1.2 订单的完备阶段

订单完备阶段是在商品下单页完成的
订单完备阶段是 将一笔订单的 所有交易信息 补充完备,订单的完备信息包括 1.配送信息(配送方式、时间、运费)
2.商品数量 (可在下单时确定)3.发票信息 4.服务增值(退换、保修)。所有交易信息完备后订单金额已确定,进入支付阶段。

1.3 订单的支付阶段

订单的支付阶段是在订单付款页面完成的。

订单的支付阶段,用户在此阶段可以选择支付方式完成付款,也可以取消支付,在订单管理页面继续处理订单。
订单支付完成后进入订单服务阶段。

1.4 订单的服务阶段

订单服务阶段包括 未完成支付订单的后续处理,其操作包括继续支付编辑订单取消订单
对于已完成支付的订单,可能的处理有 确认收货商品交易评价退货退款查看发票等操作,

订单进入服务阶段后,一般意味着订单生命流程的结束,后续只需要对订单数据进行维护管理就可了。

2.下单页 业务流程概要设计

根据之前的分析,下单页对应着订单生命流程中的订单完备阶段,

订单完备阶段概要设计如下:

1.用户在购物车商品列表页选定商品种类和各个商品数量。
2.点击确认购买,将商品种类和商品数量 通过接口提交给后端。
3.后端接到请求后,校验 商品的有效性(库存、是否下架)若无效,返回错误信息,停留在购物车商品列表页。
4.若请求有效,服务端生成临时订单号,将临时订单 的信息(商品信息物流信息发票信息服务增值等)返回给APP端(包括临时订单号)进入下单页。
5.app端展示订单信息后,商品信息、物流信息、发票信息、服务增值等改动通过各自相关接口 更新服务端数据
6.如果此时退出下单页面,临时订单保持 3个小时的时效性。用户再次下单时,后端清除超时的临时订单。
如果用户停留在下单页超时,确认订单时返回错误信息提示用户订单超时已失效,请重新下单。这个操作可以兼容账号多端登录同时下单。
7.用户点击确认订单,将本地临时订单号上传,服务端将临时订单转为正式订单,返回正式订单号,进入订单支付阶段,并将订单状态置为待支付状态,等待支付。同时更新购物车商品列表。
8.用户支付完毕后,维护对应的订单号,订单完成支付阶段进入订单服务阶段。此时订单信息不可人为修改。
9.若用户没有完成支付,返回到其他页面,或直接退出APP,此订单成为待支付订单,在订单服务阶段进行处理。

至此,下单页的业务流程完毕,接下来就是订单维护阶段的工作了,且听下回分解。

转载于:https://www.cnblogs.com/miaocunfa/p/10605669.html

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

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

相关文章

[vue] 怎么访问到子组件的实例或者子元素?

[vue] 怎么访问到子组件的实例或者子元素? this.$refs个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

php求数组交集的自定义函数,php数组交集函数

在数学中的交集运算,大家在学习的时候还是比较轻松的。我们在php数组里,可以借助array_intersect()函数对两个数组求交集,最后得到一个想要的交集数据。在正式开始array_intersect()使用前,我们需要先对函数的概念、语法、参数、返…

DNS溢出内测

编译的两个版本/Files/allyesno/DNS.rar 转载于:https://www.cnblogs.com/allyesno/archive/2007/05/28/762460.html

工作374-前端margin:0 auto为什么会失效

1.要给居中的元素一个宽度,否者无效。 2.该元素一定不能浮动,否者无效。 3 在HTML中使用标签,需考虑好整体构架,否者全部元素都会居中的。 4.display:table-cell display:table-cell属性指让标签元素以…

Hessian之简单使用

以下是简单的hessian服务代码&#xff1a; 1.导包 <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.38</version></dependency> 2.编写HessianServerProxyExporter类&#…

aix 7 oracle 10g,在64位aix上安装oracle10g

在aix中安装oracle比linux要方便许多,不需要先设置什么内核参数.设置好oracle用户,组,这些与在linux上安装一样.分配空间,在profile中设置bin目录的路径,oracle_home变量,这些常规的配制就不多说了,大同小异.在aix中,oracle提供了一些工具,可以拿来做安装前的检查工作.工具是va…

为什么我也开博

为什么我也开博&#xff1f;其实很早就想写点东西了&#xff0c;可是一直没有时间&#xff0c;不过&#xff0c;现在想想即使当时写了&#xff0c;还真不知道写点什么。是工作这几个月来的一些经历&#xff1f;还是学习当中的一些小技巧&#xff1f;还是刚刚进入这个行业的困惑…

[vue] 在组件中怎么访问到根实例?

[vue] 在组件中怎么访问到根实例&#xff1f; 通过this.$root个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

2016 hctf fheap 题解

题目链接 https://github.com/zh-explorer/hctf2016-fheap 题目分析 题目功能只有 malloc 和 free 的功能&#xff0c;查看堆的布局&#xff1a; 全局指针没有置空&#xff0c;导致 uaf 和 double free 漏洞&#xff0c;两种都可以做&#xff0c;但是这题的重点是绕过 PIE。 do…

[vue] 在子组件中怎么访问到父组件的实例?

[vue] 在子组件中怎么访问到父组件的实例&#xff1f; 通过this.$parent个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

linux 文件拆分 合并,Linux下文件的切分与合并的简单方法

linux下文件分割可以通过split命令来实现&#xff0c;可以将一个大文件拆分成指定大小的多个文件&#xff0c;并且拆分速度非常的快&#xff0c;可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通过cat命令来实现&#xff0c;非常简单。在Linux下用split进行文件…

Docker: Jenkins里的pipeline编写基本技巧

Jenkins里&#xff0c;先新建一个pipeline项目 Pipeline Syntax 在Sample Step里选择需要的插件&#xff0c;如果不存在&#xff0c;就去系统管理&#xff0c;插件管理里&#xff0c;进行安装。 如果源码管理工具用的是git,就在下拉里选择git 如果源码管理用的是svn&#xff0c…

[vue] 说说你对Object.defineProperty的理解

[vue] 说说你对Object.defineProperty的理解 Object.defineProperty定义新属性或修改原有的属性&#xff1b; vue的数据双向绑定的原理就是用的Object.defineProperty这个方法&#xff0c;里面定义了setter和getter方法&#xff0c;通过观察者模式&#xff08;发布订阅模式&am…

非等值连接,外连接,自连接,子查询

非等值连接,外连接,自连接,子查询 非等值连接: select empno,ename,sal,grade from emp,salgrade where sal between salgrade.losal and salgrade.hisal; 外连接: select * from emp,dept where dept.deptnoemp.deptno(); 除了部门号相同的外,还加上了emp中没有而dept中包含的…

linux内核模块编写,Linux内核模块编程

1 总体设计思路Linux内核是单体式结构&#xff0c;相对于微内核结构而言&#xff0c;其运行效率高&#xff0c;但是系统的可维护性和可扩展性较差。为此&#xff0c;Linux提供了内核模块(module)机制&#xff0c;它不仅可以弥补单体式内核相对于微内核的一些不足&#xff0c;而…

函数式编程(一)

一、特征 函数式一等公民 强调将计算过程分解成可以复用的函数 纯函数、没有副作用 二、compose function compose(...funcs) {if(funcs.length 0){return (args)> args; }if(funcs.length 1){return funcs[0]; }return funcs.reduce((a,b)>(...args)>b(a(...args))…

[vue] vue组件里写的原生addEventListeners监听事件,要手动去销毁吗?为什么?

[vue] vue组件里写的原生addEventListeners监听事件&#xff0c;要手动去销毁吗&#xff1f;为什么&#xff1f; 需要&#xff0c;原生DOM事件必须要手动销毁&#xff0c;否则会造成内存泄漏个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff…

《解剖PetShop》系列之三

《解剖PetShop》系列之三 三、PetShop数据访问层之消息处理 在进行系统设计时&#xff0c;除了对安全、事务等问题给与足够的重视外&#xff0c;性能也是一个不可避免的问题所在&#xff0c;尤其是一个B/S结构的软件系统&#xff0c;必须充分地考虑访问量、数据流量、服务器负荷…

linux下带密码的scp,linux下带密码的scp

from linux下带密码的scp (2014-03-10 12:35:46)背景&#xff1a; 需要将一台机器的数据传输到另外一台机器上&#xff0c;两台机器没有信任关系&#xff0c;没有数据源一方没有ftp或者http&#xff0c;无法进行wget 解决方法&#xff1a; 在其中一台机器安装expect&#xff0c…

@RestControllerAdvice注解使用

在spring 3.2中&#xff0c;新增了ControllerAdvice&#xff0c;RestControllerAdvice 注解&#xff0c;可以用于定义ExceptionHandler、InitBinder、ModelAttribute&#xff0c;并应用到所有RequestMapping中。参考帮助文档。RestControllerAdvice 是组件注解&#xff0c;他使…