首页 > 其他分享 >交易系统:订单模型设计详解

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

时间:2024-12-11 12:11:05浏览次数:9  
标签:20 订单 交易系统 优惠 金额 商品 详解 ID

大家好,我是汤师爷~

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

订单域核心概念模型

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

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面试真题、简历模版、架构设计,等经验分享。

标签:20,订单,交易系统,优惠,金额,商品,详解,ID
From: https://www.cnblogs.com/tangshiye/p/18599219

相关文章

  • 面对除夕圣诞节订单洪峰,电商团队协作办公软件哪家强?
    当冬日的寒风携带着元旦的喜庆、春节的祥和、除夕的温馨以及圣诞节的欢乐席卷而来时,电商行业也随之步入了最为繁忙的季节。在这个订单如潮水般涌来的特殊时期,高效的团队协作成为了电商企业成功应对挑战、把握机遇的关键所在。而可视化团队协作办公软件,则宛如冬日里的暖阳,为忙碌的......
  • 【洛谷】P1217 [USACO1.5] 回文质数(AC详解)
    #include<iostream>//引入输入输出流头文件,用于实现标准输入输出操作,例如使用cin和cout#include<cmath>//引入数学函数库头文件,主要用于调用sqrt函数来求平方根,辅助判断质数usingnamespacestd;//函数声明,用于判断一个整数是否为质数,接收一个整数参数,返回布尔值......
  • ThreeJs-06详解灯光与阴影
    一.gsap动画库1.1基本使用和原理首先直接npm安装然后导入比如让一个物体,x轴时间为5s旋转同理动画的速度曲线,可以在官网的文档找到1.2控制动画属性与方法当然这里面也有一些方法,动画完成,动画开始等一些属性也可实现停止动画随时,给到一个变量双击暂停以及恢复......
  • oracle 架构详解
    Oracle数据库是一个复杂且强大的关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。了解Oracle的架构对于数据库管理员(DBA)、开发人员和架构师来说至关重要。以下是Oracle数据库架构的详细解析,涵盖了其主要组成部分、工作原理以及如何优化性能。Oracle数据库Oracle数......
  • Python网络爬虫技术详解与实践案例
    Python网络爬虫技术详解与实践案例在大数据时代,数据是驱动业务发展的重要资源。如何高效地获取数据,成为许多开发者关注的重要课题。Python网络爬虫作为一种自动化数据抓取工具,在数据采集领域扮演着重要角色。本文将详细介绍Python网络爬虫的基础知识、进阶技巧,并通过实际案......
  • XSS跨站脚本攻击详解
    一、XSS攻击简介跨站脚本攻击的英文全称是Cross-SiteScripting,为了与CSS有所区别,因此缩写为“XSS”由于同源策略的存在,攻击者或者恶意网站的JavaScript代码没有办法直接获取用户在其它网站的信息,但是如果攻击者有办法把恶意的JavaScript代码注入目标网站的页面中执行,他就可以......
  • (牛客网2024最新版)1100+大厂面试题附答案详解
    Java现在好找工作吗?目前还是挺好找的,楼主我是java开发将近10年了,做架构师也有两三年了,我发现只要是水平高的基本上能找到好工作,就算这两年形势这么差,也还是能找到好工作的,那么我就来说说java方面要达到一个什么样的水平才能找到好工作吧。java方面什么jdk源码就不......
  • java抽象类详解
    在Java中,抽象类是一种不能被实例化的类,它通常被用作其他类的基类。抽象类可以包含抽象方法和具体方法,它们提供了一种方式来定义一个通用的模板,这个模板可以被其他子类实现和扩展。以下是关于Java抽象类的一些详细解释:1. 定义抽象类:在Java中,使用abstract关键字来定义一个抽......
  • java接口详解
    在Java中,接口(Interface)是一种引用类型,它定义了一组方法规范,这些方法必须由实现接口的类来具体实现。接口是Java实现抽象化的一种机制,它是一种完全抽象的类。以下是关于Java接口的详细解释:1. 定义接口:使用interface关键字定义一个接口。publicinterfaceMyInterface{ ......
  • ABB机器人控制信号电缆故障维修方法详解
    一、引言ABB机器人作为自动化生产线上的重要组成部分,其控制信号电缆负责传输关键的控制信号和数据,对机器人的正常运作起着至关重要的作用。然而,在长时间的运行过程中,由于环境、老化或人为操作等多种因素,控制信号电缆可能会出现故障。本文将详细介绍ABB机器人控制信号电缆的常见故......