电商系列之取消订单

    > 插:AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

坚持不懈,越努力越幸运,大家一起学习鸭~~~

一个简单的取消订单操作背后的业务逻辑是多么的复杂。

在网购的流程中,大家一般接触的比较多的都是正向流程,即下单的流程:浏览商详、加入购物车、提交订单、确认收货等。但是系统设计的时候往往会发现逆向流程比较正向流程更加的复杂,大家经常接触的逆向流程一般主要两类:取消订单和售后退货。

今天先跟大家聊下取消订单背后的逻辑,对用户来说只是一个简单的申请取消的按钮,但是后台确实做了比较复杂的逻辑。例如要判断订单能不能取消?关联订单需不需要一起被取消?应该退多少钱给用户?等等一系列的问题。

下面先看下取消订单一个比较典型的业务流程,我拿京东作为举例。

发起申请

当在京东上下过一单之后,在我的订单里面可以看到这个订单的详情,这时候会看到“申请退款”这个选择。这里叫法不一样,有的平台这里叫做“取消订单”,这个时候你可以进行申请。

取消中

然后你可以看到取消的状态,刚刚取消后查看状态为“取消处理中”,下面的进度里面可以看到是正在进行仓库的拦截。因为订单已经产生了,系统会将订单推送到仓库系统进行生产,库内作业是有一段时间的,要拣货、打包等。如果此时订单还没出库,你发起取消订单的申请,这时候会到仓库进行拦截,找到这单告诉仓库的人不要发了。如果订单已经出库,这时候你再发起取消订单的申请,那么你的申请可能会失败,一般主流的做法是可以收货的时候进行拒收或者申请售后退货。但是要付出代价的,有的会扣你的运费,有的会扣经验值;也有免费的,但是有次数限制。

取消完成

当取消成功后,取消状态会变成已经完成,订单状态会变成已经取消。

上面只是取消订单一个比较简单的场景:一单只有一个商品。

如果一张订单中有多个商品,并且被拆成多个包裹后事情就变得复杂了。

首先一个问题是,多个包裹支不支持按照包裹维度进行取消?不支持的话只能整单取消,用户体验不是很友好,所以主流电商平台都是支持按照包裹维度进行取消的。

那么问题就来了

先看下运费的问题

原来你因为买了多个商品,达到了免邮的标准,这时候你取消其中一个包裹,那么可能达不到免邮的条件了,这个时候怎么办?

如果不收运费这其实是一个业务的漏洞,有的电商平台为了用户体验更好些,或者是避免后台逻辑过于复杂是真的没有收运费的,主要是靠风控体系来控制风险,如果一个人经常采用这种方式套运费的话是会被拉黑的。但是大部分的电商平台还是需要收运费的,当发现取消一个子单后,剩下的订单无法满足包邮的条件,那么需要用户支付运费,或者是从取消订单的退款金额里面把运费扣掉,或者是从你的虚拟账号里面把运费扣掉(比如扣你的积分)。

促销的相关问题

另外跟运费类似的是各种促销,满减、满赠、满返等也存在类似问题。

我们这里以满减作为例子,如果买了多个商品达到了满减的条件,享受了满减的优惠。当取消一个包裹单后如果满减的条件还满足,那么就可以正常取消。如果由于取消了这个包裹单满减条件达不到了,这个时候是需要把关联订单也一起取消的,不然也会存在业务漏洞。

资源回退问题

上面的条件都达到了可以正常取消订单,但是还需要考虑把生成订单时所占用的资源回退掉,这里主要是库存、券、积分等。

库存:生成订单的时候会先锁定库存,保证仓库可以正常生产,如果取消订单后,需要把这个库存释放,增加前台销售库存的可用量。具体库存的逻辑可以参考之前的文章电商技术解密—管好库存没那么容易

积分:生成订单后也会给用户发放一些虚拟资源,例如积分、经验值。订单取消后也需要把之前发放的资源进行回收。

优惠券:如果之前下单的时候使用了优惠券,那么订单取消后也需要把原来用掉的优惠券返还到用户的账号中,方便用户后面继续使用。

具体流程可以看下面的业务序列图

时序图new

可以看到一个简单的取消订单操作背后的业务逻辑是多么的复杂。上面的流程是用户自己发起取消订单,还有一种情况也会触发取消订单这个流程。当你下单后没有在规定的时间内进行付款,那么系统会自动把你的订单进行取消。因为要释放资源,主要是库存的资源。

取消订单后台的业务逻辑就先介绍到这里,可能有些遗漏或者错误,欢迎大家拍砖、讨论!

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

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

相关文章

SOA-面向服务架构

SOA-面向服务架构 1.概述2.SOA的设计原则包括:3. SOA实现方法1.Web Service2. 服务注册表3. 企业服务总线 细讲 超赞笔记 1.概述 SOA (Service-Oriented Architecture,SOA),从应用和原理的角度,目前有2种…

Matlab之提高交叉定位点的定位精度

通过测向交叉定位的方法,按理只需2根测向线即可得出定位点的位置。但由于误差的存在,求出的定位点位置存在一定的偏差。为了得到更加精确的定位点位置,需要对定位点进行冗余测量,从而得到多个定位点,然后通过定位点估计…

GRE和MGRE综合实验

实验拓扑图 实验思路 根据图中所属网段,配置ip地址和网关R1,R2,R3,R4配置缺省路由,可以是公网互通使用ppp验证,R1与R5为PAP验证,R5:aaa地址池,创建用户名以及密码,同时进行pap服务认证,同时在…

使用nvm管理nodejs版本

文章目录 1、下载NVM2、选择NVM安装3 、查询版本号&常用命令4、nvm命令安装指定版本node4.1 安装指定node4.2 查看是否安装成功4.3 切换node版本到你想要的版本4.4 再次查看nvm版本列表4.5 nvm其他常用命令 这个是每个全能前端经常会用到的,之前用过现在重装了&…

BitVM2:比特币上的无需许可验证

1. 引言 前序博客有: 基于BitVM的乐观 BTC bridgeBitVM:Bitcoin的链下合约Bitcoin Bridge:治愈还是诅咒? 最初的 BitVM 设计仅限于两方设置。BitVM2结合了并行和冗余实例,以引入基于 1-of-n 诚实假设的多方配置。这…

Android 自定义EditText

文章目录 Android 自定义EditText概述源码可清空内容的EditText可显示密码的EditText 使用源码下载 Android 自定义EditText 概述 定义一款可清空内容的 ClearEditText 和可显示密码的 PasswordEditText,支持修改提示图标和大小、背景图片等。 源码 基类&#xf…

WebViz可视化

WebViz可视化 Webviz是一个基于Web的可视化工具,意味着您可以通过浏览器/APP访问它,而不需要安装额外的软件。这对于远程访问和团队协作非常方便。 Foxglove是一个开源的工具包,包括线上和线下版。旨在简化机器人系统的开发和调试。它提供了…

Gitea 的详细介绍

什么是 Gitea? Gitea 是一个开源、轻量级的自托管 Git 服务,它允许用户搭建类似于 GitHub 或 GitLab 的代码托管平台。由于采用 Go 语言开发,Gitea 具有高效的性能和跨平台特性,适合个人开发者或小团队使用。 Gitea 的特点 轻量…

蓝桥杯第十三届电子类单片机组程序设计

目录 前言 单片机资源数据包_2023 一、第十三届比赛省赛 1.比赛题目 2.赛题解读 二、部分功能实现 1.继电器的开启与关闭 2.长按切换显示状态功能的实现 3.对于温度传感器小数部分的处理 4.其他处理 1)关于数码管显示小数的处理 2)关于5s后继…

结构体类型,结构体变量的创建和初始化 以及结构中存在的内存对齐

一般结构体类型的声明 struct 结构体类型名 { member-list; //成员表列 }variable-list; //变量表列 例如描述⼀个学⽣: struct Stu { char name[20]; //名字 int age; //年龄 char sex[5]; //性别 }; //结构体变量的初始化 int main() { S…

牛客NC30 缺失的第一个正整数【simple map Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成? 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件(Design Files) 4.5. 新建测试平台文件(Testbench Files&…

企业数据被新型.rmallox勒索病毒加密,应该如何还原?

.rmallox勒索病毒为什么难以解密? .rmallox勒索病毒难以解密的主要原因在于其采用了高强度的加密算法,并且这些算法被有效地实施在了病毒程序中。具体来说,.rmallox勒索病毒使用了RSA和AES这两种非常成熟的加密算法。RSA是一种非对称加密算法…

3D汽车模型线上三维互动展示提供视觉盛宴

VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代,它不仅颠覆了传统展览的局限,还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理,这一在线展…

瑞吉外卖实战学习--6、通过try和catch进行异常处理

try和catch进行异常处理 效果图前言1、公共拦截器进行异常处理1.1、创建公共报错处理的方法1.2、@ControllerAdvice中设置要拦截的类1.3、@ExceptionHandler中写处理的异常类2、完善错误拦截器2.1、效果效果图 前言 当用户名重复数据库会报错,此时就需要捕获异常操作 1、公共…

Spring: 在SpringBoot项目中解决前端跨域问题

这里写目录标题 一、什么是跨域问题二、浏览器的同源策略三、SpringBoot项目中解决跨域问题的5种方式:使用CORS1、自定 web filter 实现跨域(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、 CorsFilter(全局跨域)4、使用CrossOrigin注解 (局部跨域) 一、什么是跨域…

社交网络的未来:Facebook如何塑造数字社交的下一章

引言 社交网络已成为我们生活中不可或缺的一部分,而Facebook作为其领军者,一直在塑造着数字社交的未来。本文将深入探讨Facebook在未来如何塑造数字社交的下一章,并对社交网络的发展趋势进行展望和分析。 1. 引领虚拟社交的潮流 Facebook将…

小白从0学习ctf(web安全)

文章目录 前言一、baby lfi(bugku-CTF)1、简介2、解题思路1、解题前置知识点2、漏洞利用 二、baby lfi 2(bugku-CTF)1.解题思路1、漏洞利用 三、lfi(bugku CTF)1、解题思路1、漏洞利用 总结 前言 此文章是…

Java复习第十二天学习笔记(JDBC),附有道云笔记链接

【有道云笔记】十二 3.28 JDBC https://note.youdao.com/s/HsgmqRMw 一、JDBC简介 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet,每个数据库厂商实现了这套接口,例如MySql公司实现了:MySql驱动…

手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210,将在线训练的模型部署在K210(代码后面给出)上,能够识别卡皮巴拉水杯(没错,卡皮巴拉,情绪稳定,真的可爱!)。数据集是用K210拍…