交易系统:订单模型设计详解

news/2024/12/12 17:29:04/文章来源:https://www.cnblogs.com/tangshiye/p/18599219

大家好,我是汤师爷~

订单模型作为整个交易系统的核心,支撑着所有交易环节。

订单域核心概念模型

如图所示,为订单核心概念模型。

1、订单

在实际交易业务处理中,订单会根据不同的业务规则(如店铺、收货地址、配送方式等)拆分成多个子订单,形成一个父订单对应多个子订单的结构。这种拆分机制便于后续的订单履约和商家结算。订单包含以下核心字段:

  • 租户ID:标识订单所属的租户
  • 订单ID:订单的唯一标识
  • 父订单ID:关联的父级订单ID(如有)
  • 商家ID:关联的商家标识
  • 订单类型:区分普通订单、预售订单、跨境订单等类型
  • 下单时间:订单创建的具体时间
  • 支付方式:如现金、银行卡、移动支付、标记支付等
  • 订单状态:反映订单当前所处环节
  • 订单备注:存储订单相关的补充说明
  • 合计金额:订单商品的原始总金额
  • 实付金额:扣除优惠后的实际支付金额
  • 优惠金额:各类促销、优惠券等减免金额

2、订单明细

订单明细是订单中每一个具体商品的详细信息记录,包含以下关键信息:

  • 订单明细ID:每条明细的唯一标识
  • 订单ID:关联的订单编号
  • 商品ID和SKU ID:标识具体商品及其规格
  • 商品编码:商品的内部编码标识
  • 商品数量:购买的数量
  • 商品原价:单个商品价格
  • 商品金额:该商品的总金额
  • 商品实付:
  • 明细类型:区分普通商品、赠品等
  • 优惠金额:应用到该商品的优惠金额

2、渠道信息

记录订单的购买渠道,如电商平台、O2O平台或门店。这些信息有助于分析销售策略和客户购买行为。

3、客户信息

客户的基本信息,包括客户名称、客户类型、客户生日等,用于支持后续的营销活动和客户服务。

4、营销信息

包括订单中应用的促销活动、折扣、积分使用等信息。这些数据帮助商家追踪促销效果并了解客户购买偏好。

5、收货信息

详细记录商品买家的收货信息,包括收货人姓名、手机号码、联系电话和收货地址。

6、支付信息

记录客户的支付方式、支付状态、支付时间和支付金额。这些信息对财务管理和订单结算流程至关重要。

7、交付信息

记录了商品交付的详细情况,包括:预计送货时间、预计送达时间、预约送达时间范围(开始和结束时间)、预约自提时间范围(开始和结束时间)、自提位置、配送方式等。

8、费用明细

费用明细记录订单中的各项费用,包括运费、打包费、服务费等额外收费项目。

订单拆单场景

订单拆单是指在订单创建时,根据预设的业务规则,将一个完整订单分解为多个子订单的过程。规则通常涉及多个维度,包括商家主体、交易模式、商品属性和物流要求等。

通过拆单,系统能够满足复杂的业务需求,提高订单处理效率。以下为常见拆单场景与案例说明:

1、按商家(店铺)拆分

当订单包含多个商家的商品时,系统会按商家将其拆分为独立子订单。例如,你同时购买了服装店和数码配件店的商品,系统会将订单拆分为两个子订单,分别由各自商家备货和发货。

这样拆分可以让每个商家能独立处理订单履约、售后服务和财务结算,确保账务清晰,避免纠纷。

2、按交易模式拆分

不同交易模式往往有特定的资质要求和结算方式。以海外购为例,商品需通过跨境资质认证和海关申报,并计算关税。如果订单中既有普通国内商品,又有海外购商品,系统会将海外购部分独立成子订单,以便专门处理相关资质与税费事宜。

3、按品类拆分(如药品、生鲜)

不同品类的商品处理要求大不相同。药品需要严格遵循处方审核和药剂师复核流程。如果订单中既有处方药,也有普通日用品,系统将药品部分独立拆分,确保合规处理。

同样,生鲜食品需冷链运输。当订单同时包含生鲜与普通商品时,系统会将生鲜部分单独划分成子订单,确保冷链物流的顺利执行,避免商品的新鲜度。

4、按收货地址拆分

当用户想将订单中的商品分别送给不同城市的亲友,并且在一个订单中享受最多的优惠,系统会按收货地址进行拆分。例如,一份订单需分别配送至北京、上海和广州。系统会生成三个子订单,每个子订单对应一个收货地址,确保为各自的配送线路选择合适的物流服务。

通过合理的拆单策略,交易系统可以更灵活地满足复杂的业务场景,实现精确的分工与高效的履约。

订单状态机

订单状态机是指在订单处理流程中,用类似有限状态机的方式来定义和管理订单所经历的不同状态,以及状态间转换逻辑的机制。

通过状态机的设计,可以清晰、结构化地定义订单从生成到最终完成或取消的整个生命周期,明确订单在每个阶段所处的状态,以及不同状态之间的转换条件和业务规则。

订单金额计算

订单金额计算是电商交易系统中的一个核心环节,它不仅涉及基础的商品价格计算,还需要处理各类优惠、折扣、运费等多个维度的金额。下面我们通过具体示例,详细分析订单金额的计算方法和优惠分摊机制。

1、订单金额的计算示例

让我们设定一个简单场景。用户在购物车中添加了 2 个吐司面包,每个售价 20 元,共计 40 元。该订单满足两个优惠活动:

  • 当购买吐司面包时,满 40 元减免 5 元。
  • 订单金额满30,可减免 6 元配送费。

另外,还需支付 1 元的包装费用,订单的各金额计算如图所示。

  • 订单合计金额为 47 元(商品总价 40 元 + 配送费 6 元 + 包装费 1 元)。
  • 优惠金额为 11 元(包括 5 元商品减免与 6 元配送费减免)。
  • 最终用户支付金额为 36 元(47 元 - 11 元 = 36 元)。

2、订单优惠分摊示例

优惠分摊是指将订单中的整体优惠,合理分配到各个商品上。优惠分摊非常重要,主要作用有:

  • 准确计算每件商品在享受优惠后的实付金额,用于后续计算商品额实际收入和利润。
  • 出现售后时,可快速计算出应退还的合理金额,避免计算误差与纠纷。

下面是一个更复杂的案例,展示优惠分摊的计算过程。假设顾客的购物清单为:

  • 吐司面包 2 个,合计 40 元
  • 草莓蛋糕 1 个,合计 150 元

上述商品总计 190 元,并参与 "满 180 减 20 元" 的促销活动。此外,订单还包含 20 元的配送费和 6 元的包装费。

此时需要将 20 元的总优惠分配到各商品上,分摊逻辑是根据商品金额占比来计算:

  • 吐司面包(2 个)的分摊金额:20 元 × (40 元 / 190 元) = 4.21 元
  • 草莓蛋糕的分摊金额:20 元 × (150 元 / 190 元) = 15.79 元

当出现除不尽的情况时,系统会将最后一分钱的差额计入订单中的最后一个商品,从而保证商品的优惠金额总和与实际优惠金额完全一致。

分摊完成后,订单金额为 216 元(商品 190 元 + 配送费 20 元 + 包装费 6 元),减去 20 元优惠,顾客实际支付 196 元。

本文已收录于,我的技术网站:tangshiye.cn 里面有,算法Leetcode详解,面试八股文、BAT面试真题、简历模版、架构设计,等经验分享。

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

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

相关文章

从报表到可视化,基于开源Superset实现数据管理升级的实践

华为云DTSE助力泰国OfficeMate(简称OFM)实现开源Superset在华为云上落地实践。本文来源:《华为云DTSE》第六期HDC 2024专刊,作者:华为云开发者技术服务团队。华为开发者大会(HDC 2024)“DTSE提供全旅程专业技术服务,助力开发者体验效率提升和创新”专题论坛上,华为云D…

RNN 手动实现

RNN原理 RNN的整体架构如图 RNN每次看到一个词,通过状态hi来积累看到的信息。 例如,h0包含x0的信息,h1包含x0和x1的信息,最后一个状态ht包含了整句话的信息,从而可以把它作为整个句子的特征,用来做其他任务。 注意,无论RNN的链条有多长,都只有一个参数矩阵A,A可以随机…

百度文本编辑器Ueditor存储、取用以及生成PDF

一.Ueditor存储、取用 1.引用编辑器配置文件 2.设置编辑器的大小 3.加載編輯器的容器 4.从数据库获取到内容后,js赋值到编辑器中(result.NoticeMsg是我获取的内容) 5.点击新增时,编辑器进行清空处理:ue.setContent(""); 6.点击保存时,获取编辑器内容并打包成js…

达梦删除归档的几种方式

1.通过归档日志的相关参数 配置归档 alter database mount;alter database add archivelog dest=/data/dmarch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=51200;alter database archivelog;alter database open;SPACE_LIMIT --显示了归档文件夹的大小,文件夹满了会自动覆盖最早…

Librenms强制修改密码

本来没这事的,不小心在网页点了修改密码,填充的自动生成的密码,又没保存生成的密码,改密码又得需要原来的密码,只能通过数据库改回来了。所有的具体操作步骤: 1、找一个在线生成密码的网站,例如https://onlinephp.io/password-hash 2、生成一个新的hash密码,例如“@@12…

太假了,这简历一看就是包装的。。

大家好,我是R哥。 最近做 Java 面试辅导,看了许多小伙伴的简历,有的人的简历一看就知道是包装的,比如这位,他自己都承认了:见过太多这样的同学了,自己瞎折腾,哭笑不得。 包装过的简历,作为多年面试官,我一眼就能看出来,相信其他面试官也会有同样的感觉,这也是为什么…

论文解读-Graph neural networks: A review of methods and applications

论文介绍 这篇论文是图神经网络领域的综述性质的文章,从各个论文里面凝聚和提取了很多精炼的信息和观点,值得一读。 论文是2020年成稿投出去的,有点陈旧的。 GNN的介绍 在introduction里面对比了GNN和CNN,表示出CNN的关键是局部连接,共享权重,和多层的使用。其中CNN操作…

【虚拟机】Windows(x86)上部署Win11 on ARM虚拟机

参考链接: 1. https://blog.csdn.net/XiaoYuHaoAiMin/article/details/140701250 2. https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4530491488179269409&sourceFrom=search_a 第一步:安装QEMU虚拟机 1. 下载链接:https://www.qemu.org/(这个链接找到的…

VsCode插件CnBlogs博客园客户端使用体验

VsCode插件CnBlogs博客园客户端使用体验 VsCode安装以及插件安装VsCode官网下载 VsCode插件CnBlog下载地址CnBlog插件功能 1.账户登陆2.工作空间3.随笔分类4.随笔列表5.编辑MarkDown博客

MCGS读取经纬度

1.将4G通讯状态调整为GetLocationFromGaoDe的触发条件 2.取消经纬度循环赋值,减少流量消耗 资料说明: 资料为4G屏获取经纬度的样例工程 注意事项: 1.此样例仅支持4G屏,WiFi屏获取经纬度无效 2.4G驱动仅支持V1.009及以上版本,定位失败优先检查驱动版本 操作步骤:添加mcgsI…

Windows 触控笔

平板以及二合一平板均是触控屏,Laptop现在也有很多屏幕带触控 触控屏,都会配置触控笔配件,目前市场上一般是电容屏+电容笔的技术方案。 触控笔分为主动笔和被动笔,主动笔占绝大部分。主动笔是通过内部电池或电源供电的,可以主动发送信号给设备,采用电磁感应原理,通过在屏…

启动终端判断SSH是否启动

启动终端判断SSH是否启动 原理:在Linux系统启动后,会运行shell(bash、zsh等)软件的配置文件~/.bashrc​,~/.zshrc​等 ‍ ‍ 以zsh​为例,在~/.zshrc​中添加如下内容 # ...# 检查 SSH 服务是否正在运行 ssh_status=$(service ssh status)if echo "$ssh_status"…