【电商】订单拆单的流程中,系统需要做哪些工作?

news2024/10/2 1:32:56

在这里插入图片描述

什么是拆单?

在网上购买商品下单成功后,过一段时间再次浏览时,有时会发现你的订单会变成两个或多个,这就是系统做了拆单而导致的。

拆单,就是将一个大的订单依据某些规则的集合,将其分解成两个或多个子订单的过程,原来的订单称之为父订单。

拆单的重要性

通常我们所说的拆单一般情况下是指用户的销售订单,但在实际业务中,拆单情况随处可见,如采购订单的拆分、调拨单的拆分等等。本篇后续都是以销售订单的拆单讲述的,请知悉!

在互联网电商系统中销售订单是与C端用户关联最紧密的,单据量是最大的,是影响用户体验的,且拆单的规则相对来说是比较复杂的。

折单要求数据准确、及时,因为拆单后的子订单是需要流入到仓储进行生产作业的,它会进行拣货、出库、配送等一系统的流程,它也是后续财务系统对账或结算、数据分析的重要数据来源。

拆单的场景

用户在APP等平台下单后,由于商品的库存数量不满足,可能在前端进行拆单,即用户自己选择是否需要拆单,可以按最快送达或最小拆单的规则进行。

看到这里您可能会有点疑惑,库存不足时还能下单吗?现在很多网站上当商品不足时用户需要自行修改数量,然后才能下单。

确实如此,现在这种场景少了,但是有的商家为了提升客户体验,对于商品可以多仓发货时。因为单仓缺货而需要拆单时,由用户来选择决定是否购买,这应该也是为了提高转化率的一种方式。

还有一种场景,订单涉及多商家,需要单独付款的情况下,前端会直接进行拆单,但现在基本上都是合单支付了,这种拆单会使用户体验降低。

此外,有的商家既卖国内商品,也卖海淘商品,如果都混在一块,那么在支付前是需要进行拆单的,因为海淘商品要求用户的身份认证等信息的检验。

在多数情况下,都是用户下单完成后,由系统进行在后台进行拆单,拆单是要结合公司业务场景去考虑的。

用户购买涉及几种拆单

拆单除了以上几种场景,对于用户下单时系统上还会有什么操作吗?

有一种情况即用户下单时系统要根据用户选择的收货地址、商品等信息,判断是否有库存,订单应该归属哪个仓库,是否可以购买等,这个服务严格来讲应该归属于商品库存服务,但是也可以将其称为预拆单。

预拆单一般是调用仓储服务进行库存的判断,同时还要根据促销活动进行一些优惠计算,所有的这些都需要前端系统在处理时对订单商品进行一些标识,以便当用户支付成功后,订单流转到OMS系统进行物理拆单。

前端用户下单成功后,订单经过OMS的拉单服务快速流转到订单中心,便开始订单的再生成过程,订单拆分后的子订单会展示给用户,原订单一般不需要再展示,便于用户跟踪和查看。

所以在从用户角度来看,一种是可以直接看到结果的拆单和一种无感知的预拆单过程。

拆单的时点与地点

预拆单是伴随着购物流程进行的,这里不多讨论,因为这个究竟是否属于拆单也是要看我们如何定义。正常情况下用户选购商品完成后,系统不会拆单,因为用户有可能取消订单或未支付成功。

拆单的时点是要在 “订单支付成功” 后进行,且需要前端订单已经流转到后端生产库,在订单中心进行处理。

在前面有一种场景,如果购物中心不能合并支付时,在购物车中便拆分为几个订单,这时的拆单可以定义为一次拆单,也可以归属于购物流程,因为用户不提交就不会生成订单号,不会保存各个订单的数据。

在用户支付成功后,各个订单同样是要向后台流转,经过拆单服务的处理才可以继续进行下面的生产。

在前面讨论拆单场景时提到一种缺货拆单,这种场景的拆单是在用户下单支付成功后,订单有可能已经拆分为不同的子订单,但因某种原因仓库无货而导致的拆单。

这时拆单的时点是灵活的,一般是在客服系统中,根据用户的反馈确定是否拆单的。

缺货是影响用户体验的,但是缺货是始终客观存在的。

拆单分几级

在这里插入图片描述
从上图看,拆单应该为三级,即用户创建的订单为父订单,然后经过拆单服务正常的分为多个子订单为第二级,后续因为缺货等原因子订单再次拆分为子(孙)订单。

在数据设计上,一般情况子订单与父订单的关联都通过ParentID来进行关联,但三级以上时,涉及原始订单的查询较麻烦。

具体看数据结构如何设计了,可以再增加一个原始订单号来记录最初的订单号,方便统计查询等,负责拆单服务的同学可以详细讨论下。

为了避免订单的复杂度及系统的查询、统计、分析等数据处理的难度,订单最好最多到三级,不宜过多。

拆单状态

拆单过程中也涉及订单状态的变换。

  1. 当父订单拆分为子订单后,子订单生效,父订单应该置为无效。
  2. 子订单或父订单经过缺货拆单后,原订单状态是无效还是其它?
  3. 订单拆单后状态应该置为“待下发”即需要通过下发服务,将订单推送给仓库发货。
  4. 如果订单已经下发到仓库后需要缺货拆单,单据状态应保留原状态。

这些都属于细节,但不得不考虑,因为订单的状态涉及到其他业务系统的计算和统计。

如:财务系统在应付报表时是根据支付订单进行统计和对账的,如果订单状态是无效的,那么系统如何获取此部分数据。

BI有些统计分析是按状态和订单数量等进行统计的,如客单价、有效订单数等等。

所以针对拆单而导致的订单状态是否应该区分原有的订单状态分别标识,是需要综合考虑的。

拆单原则

拆单的原因我们已经清楚,拆单的目的是为了保证履单,拆单的原则是什么?

  1. 首先是最小拆单原则,即能拆两单,不能拆成三单,因为多拆一单不仅是单据数量的增加,它会增加系统的复杂度,降低用户体验,加大仓库作业量,增加运费费用等。
  2. 最快送达原则,拆出的子订单要快速生产,快速送达,这个是增加用户体验的最好办法。但是快速送达,依赖于仓储物流的布局,这个在多仓可以发送到一个城市时尤为重要。

在这里插入图片描述
一般情况下,拆单要遵循这两条原则,同时我们也看到拆单服务,是依赖于基础信息配置的,电商系统最复杂的是很多地方都有关联。

拆单规则

拆单的规则因每个公司的业务不同而不同,这里罗列一些常见的规则供参考。

(1)不同商家的订单需要进行拆分

这个主要应用于平台型的电商,一般情况用户购买商品都进入不同的店铺,创建的订单也是归属这个商家的。但有的平台采用合单支付,即用户选购不同商家的商品,但支付是一次的。

这个和淘宝有些不同,淘宝上每个商家的收款账号是不同的,所以不能一次支付,但平台商家是平台代收款的,所以可以一次支付后再拆单分摊金额。

(2)不同仓或不同供应商的商品需要进行拆单

仓库不同订单需要分开,对于不同的供应商订单主要是指由供应商直接发货的订单即商品不存储在仓库,由供应商直送到用户,这个和平台商家类似。但是区别是签署的合同不同,一个是购销合同,一个是佣金扣点合同,细节不展开了,有兴趣可以留言交流。

(3)商品类型不同需要拆单

一般区分奢侈品或有特殊要求的商品,这个需要业务根据商品要求进行设置。因为商品要求不同,后续在物流环节采用的物流产品类型也不同,物流费用也不同。这部分也可以根据商品信息,在仓储进行处理,但最后在上位能够提前区分。

(4)商品温控属性不同要进行拆单

此部分一般是指生鲜电商而言,同一个仓库有常温仓、冷藏仓、冷冻仓,存储着不同的商品,商品的拣货、包装等都有不同的要求,所以需要进行拆单。

(5)大件商品拆单

大件商品与普通商品不同,它在仓库的存储位置、拣货方式、包装、运输都有所区别,所以大件商品需要每一件都拆单,大件商品一般遵循最快送达,不需要最少拆单原因的限制。

(6)根据库存拆单

这个是针对缺货商品进行的拆单,即有库存的一单,无库存的一单,如果是二级订单,则父订单相同,子订单衍生出子订单,子订单1的过程。

(7)线下门店商品不拆单

如果是线下门店购买商品,则不需要拆单。

(8)组合商品不能拆单

在促销活动中,有时会有一些大礼包等商品的组合销售,即A,B,C等商品经过仓库的组合包装后出库,所以针对此类商品不能拆单。

在拆单服务中需要调用物料单信息,进行判断,具体的要看系统如何设计了。

拆单的规则很多,在系统处理时,要依赖于规则设置的优先级来进行。

拆单算法

(1)稀缺商品算法

找所有商品在所有库房最稀缺的商品,获取该商品的阶数。

(2)降阶

找稀缺商品的都需要仓库组合,这些仓库是必须发货的,把这些仓库计入发货列表,这样就降阶了,剩余仓库再计算组合,减少运算数量。

(3)抽屉原理算法

找第一阶的仓库列表(发货量最大的仓库),这个库房的库存是必须要发的,然后再找次发货量最大的仓库,以此类推,用于后面的组合计算。

(4)找组合

按照仓库顺序逐渐增加仓库个数找组合。

算法也只是拆单过程中的一个路径参考,且算法依赖于拆单的规则而制定,无论如何要保证拆单的结果准确,拆单的速度要快。

拆单服务两步重要工作

以上一直在讨论拆单是由1变2,由2变4的一些内容,在具体的拆单服务系统中要考虑哪些内容,又有哪些工作?

  1. 前面所说的都应该在设计时考虑,而且最重要的是要依赖规则进行设计,数据的流转,时序等等。
  2. 金额分摊是拆单中最重要的一部分工作,也是最复杂的。

父订单的拆分,商品的重新组合,生成新的订单是第一步,第二步就是要将父订单的金额合理的,正确的分摊到各个子订单上。

订单一般分为订单主表和订单商品表、订单支付明细表和订单活动表。

订单金额有几个主要的部分:订单商品金额、折扣金额、礼品卡支付金额、积分支付金额、优惠券支付金额、订单支付金额等几个部分。

运费是订单表中一个特殊字段,运费如何分摊是要特殊考虑的,一般情况是按金额占比进行。所以生成的子订单中各部分金额,也要保证与父订单金额一致。

订单商品表、支付明细表、活动表属于明细信息,要根据原始订单明细表的数据和标识进行计算分摊。

子订单的金额要保证横向、纵向都正确才行,横向是指子单的合与父单金额一致,纵向是指子单订单主表与明细表金额一致。

此外,在金额分摊计算过程有一项重要规则不可避免,即开票金额的考虑。

这部分金额的分摊与公司缴税息息相关,单据与发票要一致,要考虑商品信息、活动规则等等,非常复杂。

有的拆单服务将金额分摊独立出来,以降低对拆单的影响,提高订单流转速度。

拆单的速度要求

由于拆单后订单才会下发到仓储或商家进行生产,所以对于速度要求就是快。

在系统设计时可以依据规则等综合考虑,多线程是最常用的方法,但多线程需要考虑资源竞争和安全性。一般情况,如果下单后已经确定了仓库,那么可以按仓库启动多个服务,这样可以避免程序的难度。

对于拆单和下发在系统上也要有数据监控,不能出现积压的情况。如果拆单有异常时,在定时任务中,很多情况都是依赖一个信息字段的状态来进行循环处理,在服务中要有容错处理,不能一直停滞不前。

拆单的影响

什么是拆单?为什么拆单?如何拆单?前面说了很多,但对于拆单有什么影响呢?

先说一个场景,公司搞促销活动,买A赠B,但A与B商品的温控属性不同,所以用户下单后一定会拆单。

拆单后仓储拣货、发货是根据子订单进行的,很有可能赠品B先发货了,A后发货。用户先收到B签收了,然后A进行拒收或取消。此时,如果在拒收或取消A时不判断关联子订单,那么公司就会损失B。

如果判断关联子订单的状态,那么系统的复杂度将会非常之大,因为实际场景中一个父单拆为多单时是很常见的。

拆单后,子订单数量增加,对于客单价、统计分析等报表需要考虑其影响,维度和统计口径不同,数据结果必然不同,从而会影响到经营分析及决策。

影响,对于不同的业务有不同的理解,作为产品研发应该在拆单设计时还是需要要将利害与业务说清楚,尤其是运营人员(活动方面重点考虑),虽然这属于一个后台服务。

总结

拆单是复杂的,合理的拆单会加快订单的流转,友好的用户体验,过度拆单则会产生冗余的数据,增加订单的复杂关系,统计、计算、售后等各个环节。

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

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

相关文章

内核模块(编译方法)

目录 一、向内核添加新功能 1.1 静态加载法: 1.2 动态加载法: a、新功能源码与Linux内核源码在同一目录结构下时 b、新功能源码与Linux内核源码不在同一目录结构下时 c、主机ubuntu下使用ko文件 d、开发板Linux下使用ko文件 二、内核模块基础代码…

链表题目总结 -- 回文链表

目录一. 从中心开始找最大的回文字符串1. 思路简述2. 代码3. 总结二. 判断是否为回文字符串1. 思路简述2. 代码3.总结三. 判断是否是回文链表1. 思路简述2. 代码3. 总结4. 优化解法一. 从中心开始找最大的回文字符串 题目链接:没有。给定一个字符串s,从…

平面电路和非平面电路

主要区别 参考:https://www.eda365.com/article-192836-1.html 平面电路:在平面上的每个元件的两端都可以不用交叉而连接到电路; 非平面电路:在平面上存在元件两端无法不交叉线路连接到电路。 例子(上面参考连接中&a…

继企业级信息系统开发学习1.1 —— Spring配置文件管理Bean

骑士救美计划采用构造方法注入属性值1、创建救美任务类2、创建救美骑士类2、创建救美骑士类3、创建旧救美骑士测试类3、配置救美骑士Bean5、创建新救美骑士测试类采用构造方法注入属性值 1、创建救美任务类 在net.huawei.spring.day01包里创建RescueDamselQuest类 Rescue Da…

【重点】Selenium + Nightwatch 自动化测试环境搭建

开始搭建 1. 创建项目 我们来找个地方新建一个目录,起名为 "my-test-toolkit",然后在目录内使用终端运行 npm init -y 生成项目配置文件package.json。 2. 安装工具 然后我们将安装 Selenium 与 Nightwatch。 安装 selenium-standalone&…

在哔站黑马程序员学习Spring—Spring Framework—(五)spring的第二特征AOP面向切面编程

一、AOP概念、作用AOP和OOP一样都是一种编程思想,用来指导我们做程序的。OOP面向对象编程指导我们做类、对象、继承、封装、多态等。AOP面向切面编程作用:在不惊动原始设计(不改变源代码)的基础上为其进行功能增强。核心&#xff…

2022年全国职业院校技能大赛网络空间安全A模块(1)

目录 模块A 基础设施设置与安全加固 一、项目和任务描述: 二、服务器环境说明 三、具体任务(每个任务得分以电子答题卡为准) A-1任务一 登录安全加固 1.密码策略(Windows,Linux) a.设置最短密码长度为…

AC/DC 基础

一、概念: AC转换成DC的基本方法有变压器方式和开关方式,如下图1、2所示;整流的基本方法有全波整流和半波整流,如下图3所示。 图1 变压器方式 图2 开关方式 图3 整流方式 二、转换方式 1、变压器方式 变压器方式首先需要通过变压…

< 算法基础 之 二分查找 >

算法基础 之 二分查找前言👉 “ 二分查找 ” 原理及实现👉 实际案例:> 基础案例 - 搜索下标示例 1示例 2解决方案> 进阶案例 - 搜索二维矩阵示例 1示例 2解决方案往期内容 💨前言 在开发中,我们常常会需要查找某…

java无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…

GEE学习笔记九十二:Sentinel-2 最新去云方法总结

下面使用例子的原始影像截图如下: 第一种方法:使用QA波段去云 这是我们最常用的方法,具体原理就是利用QA60波段标记实现去云,具体代码如下: var s2 ee.ImageCollection("COPERNICUS/S2"), point /* …

B树与B+树

B树 B树的定义 1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点&…

[Android Studio]Android 数据存储--SQLite数据库存储

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…

Leetcode_part2

文章目录[406. 根据身高重建队列](https://leetcode.com/problems/queue-reconstruction-by-height/)Solution1 先排序 再插队[409. 最长回文串](https://leetcode.com/problems/longest-palindrome/)Solution1[415. 字符串相加](https://leetcode.com/problems/add-strings/)S…

上采样学习

最近邻 简单来说就是x方向和y方向分别复制 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import numpy as np import torch from cv2 import cv2 from torch import nndef numpy2tensor(x: np.ndarray) -> torch.Tensor:"""(H,W) -> (1, 1, H, W)(H,W…

ShardingSphere-Proxy5按月分表

0、软件版本 ShardingSphere-Proxy: 5.2.0 MySQL: 8.0.30 系统: win10 1、ShardingSphere-Proxy下载 我们可以在 官网 找到最新版ShardingSphere-Proxy下载,也可以在ShardingSphere仓库中下载 2、ShardingSphere-Proxy配置 …

shell编程经典案例,建议收藏

1、编写hello world脚本 #!/bin/bash# 编写hello world脚本echo "Hello World!"2、通过位置变量创建 Linux 系统账户及密码 #!/bin/bash# 通过位置变量创建 Linux 系统账户及密码#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 useradd "$1" …

Linux C++ 200行完成线程池类

文章目录1、atomic使用2、volatile关键字3、条件变量4、成员函数指针使用5、线程池6、主线程先退出对子线程影响7、return、exit、pthread_exit区别8、进程和线程的区别1、atomic使用 原子操作,不可分割的操作,要么完整,要么不完整。 #includ…

vscode开发基于Vue的健身房管理系统node.js

该系统的基本功能包括管理员、会员、教练三个角色功能模块。 对于管理员可以使用的功能模块主要有首页、个人中心,系统公告管理、健身常识管理,会员管理、教练管理、教练考勤管理、会员咨询管理、商品信息管理、团课管理、团课预约管理、论坛管理、系统管…

十三、二叉排序树

1、先看一个需求 给你一个数列 {7, 3, 10, 12, 5, 1, 9} ,要求能够高效的完成对数据的查询和添加 2、解决方案分析 使用数组 数组未排序,优点:直接在数组尾添加,速度快。缺点:查找速度慢 数组排序,优点&…