订单管理系统开发经验的总结:优化流程、提升效率的关键实践

news2024/11/28 22:50:51

前言

一.订单管理系统的架构设计

二.订单系统的详细设计

1.拆分

2.换货

3.发货

4.拦截

5.取消

6.物流回传

三.订单系统的订单状态流转

初始状态

中间状态

异常状态

终态

四.订单系统的关键代码逻辑

五.结语


前言

两年来,整个订单管理系统经过大大小小的重构,定下来了总体框架,系统也逐渐稳定下来,23年也快结束了,总结一下自己这两年的成果,顺便锻炼下文笔。


一.订单管理系统的架构设计

先简单介绍一下什么是订单管理系统,订单管理系统用于处理和跟踪销售订单的系统,涵盖从订单接收到订单履行的整个流程,我司由于是做跨境电商的,下面的场景都是基于国外平台的业务场景,在系统设计初期基于的原则便是高内聚,低耦合,强调的是可维护性与可重用性,通俗来说 就是订单中心的逻辑尽量不做修改,灵活对接各大平台,适应各种业务场景。

我们系统主要承接了三部分的订单:第三方电商平台,toB订单,手工单,第三方电商平台主要是订单量较大的国外平台,例如亚马逊,shopify等,进行了平台API对接,对公订单是公司间购买发货的订单,对接了公司内部的TOB订单模块,手工单分两种1.是基于订单的补重改发,2.平台由于单量不够,还未到开发需要对接平台的量,创建对应的平台手工单进行发货

基本架构图

我们将未进入订单中心的订单称为SP订单,进入到订单中心的称为SO订单,SP订单进入到订单中心时,必定会有自己的平台归属

每个平台微服务都会定义一个平台订单转化器,把SP订单转化成标准的SO订单,在第一二版重构中,我们主要是规范了进入订单中心的标准字段,保证其通用性,第三次重构中,在重构中在转化器中定义了各种开关,对订单进行更加精细的控制,而不用对订单中心进行改动,比如是否需要物流地址校验,是否需要扣减库存等,这样在业务发生变动时,不用改动订单中心,只需要对平台微服务进行定制开发即可。

平台与订单管理系统交互图


二.订单系统的详细设计

订单系统主要分为四个大表,分别为 订单主表,订单明细表,包裹主表,包裹明细表

当订单进入到订单中心时,会生成一个包含所有订单明细的包裹并推送给下游业务系统,订单中心与下游发货系统通过包裹进行交互,订单系统通过包裹进行各种操作,包裹反向影响订单状态

1.拆分

一.平台订单进入到订单系统时,可能会生成包含多个sku的一个包裹,当某个sku暂时不需要发运时,则可以使用包裹拆分的功能,把不需要发货的sku拆分为一个新的包裹

二.当仓储系统发现某个sku暂时没有库存时,也可以使用拆分逻辑,把有库存的sku生成一个包裹先进行发运。

2.换货

换货操作一般发生在客服和客户共同协商需要更换货物,但是不需要重新下单的情况下,此时只要更换包裹内的sku即可,此时订单的sku不会发生变化,只会变更包裹明细的sku。

3.发货

包裹会继承订单的发运信息以及关键信息,并向下游系统发起创建出库请求

4.拦截

包裹向下游系统发起了出库请求后,客服进行拦截操作,则会向下游系统发起拦截请求,此时下游系统则会向第三方仓库发起取消(自营仓则判断是否出库,未出库则直接取消),然后作废本次的出库请求

5.取消

取消操作和拦截操作逻辑上是一样的,不过唯一不同的就是进行过取消操作的订单,无法再进行操作

6.物流回传

下游系统完成发货后,通知订单中心发货明细,订单中心通过发货明细中的sku再去通知对应的平台系统,完成平台履约

PS:订单中心和下游系统的一次出入库交互应该视为是一次完整请求,请求中应包含所有的出入库信息,两个系统之间相互独立,下游系统根据出入库请求参数即可完成一次出入库操作,下游系统不应中途再通过RPC,MQ等方式再去请求订单中心获取相关参数,以便后期的需求变动和防止下游系统和订单中心的过度耦合。


三.订单系统的订单状态流转

我们将系统订单状态分为初始状态,中间状态,异常状态,终态

初始状态

订单进入订单管理系统时最开始的状态,未生成包裹信息,在生成包裹信息时自动转换成中间状态,这个状态下,会根据平台订单状态进行更新变更

中间状态

订单生成包裹后,推送给下游系统,下游系统未返回处理信息或者返回部分发货时,订单会处于这个状态,中间状态最终会流转成异常状态或者终态,中间状态的订单不再依据平台订单状态而改变,例如 订单A处于待发货状态,平台上面变成已完成,则订单A在订单管理系统还是待发货状态,由下游系统决定订单A的订单状态扭转

异常状态

异常状态分为 1.根据下游系统返回的信息而变更的异常状态。 2.订单管理系统主动操作导致的异常状态。异常状态在下游系统都是处于无法出库的状态,需要进行人工操作后,转化成中间状态或者终态

终态

终态则表示订单已经结束了,不能进行人工操作,订单不能进行任何数据变更。

状态扭转图

四.订单系统的关键代码逻辑

订单管理系统会对接各种电商,无论是技术人员听过的,还是未听过,那我们经常需要快速对接各大平台的订单,同时兼容订单管理系统的内部逻辑,不应因为平台增加而改变原本稳定的系统,从而增加技术债务.

平台订单通过订单转化器转换成系统订单,当系统订单出库完成,需要进行物流上传时,通过平台工厂类反射生成对应的平台实现类,而每一个平台实现类都是相对独立的,当某个平台发生变化时,只需要修改对应的平台实现类即可,内部逻辑调用的抽象类提供的统一的对应接口,这样在新增平台时并不需要进行修改内部业务逻辑。

UML图

五.结语

拖拖拉拉写了半个月,这份总结总算写完了,比写代码难太多了,不知不觉也当了快7年的程序员,无论是业务层面还是代码层面,依旧觉得自己是管中窥豹,路漫漫其修远兮,吾将上下而求索。

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

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

相关文章

7. 数据存储

7. 数据存储 文章目录 7. 数据存储7.1 基本存储7.1.1 EmptyDir7.1.2 HostPath7.1.3 NFS 7.2 高级存储7.2.1 PV7.2.2 PVC7.2.3 生命周期 7.3 配置存储7.3.1 ConfigMap7.3.2 Secret 在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器…

java设计模式学习之【外观模式】

文章目录 引言外观模式简介定义与用途实现方式 使用场景优势与劣势外观模式在Spring中的应用图形示例代码地址 引言 软件开发有点像烹饪一道美味佳肴,涉及的材料和步骤可能会让人眼花缭乱。就像在一家大型餐厅厨房中,有许多不同的厨房工具和设备&#x…

PVE系列-防火墙的免费安静之旅IPfire

Ventoy一款引导盘可以引导各种启动盘安装盘的工具https://www.ventoy.net/cn/index.html 在它的兼容iso的列表 中发现了Ipfirehttps://wiki.ipfire.org/ ,本来用着openwrt也挺好,忍不住的虚拟机尝了尝鲜,发现的功能有2, 安全吧&a…

Windows安装Elasticsearch并结合内网穿透实现公网远程访问

Windows安装Elasticsearch并结合内网穿透实现公网远程访问 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜…

Lumerical 技巧------Plot in New Window

Lumerical 技巧------Plot in New Window 简介正文 简介 当我们在计算模式分布后想要观察模式对应的图像,为了清晰地观察到一些细节,我们可以通过点击图像绘制窗口的 Plot in New Window 按键来实现。 正文 默认模式绘制图像如下: 窗口很…

高质量C/C++代码心得

写出高质量的C/C代码是一个涉及多方面的任务,它要求程序员不仅具备扎实的语言基础,还需要掌握一系列的软件设计和开发原则。下面将详细介绍如何写出高质量的C/C代码,并通过10个例子进行具体阐述。 一、编码规范 编写高质量的代码&#xff…

Learning Semantic-Aware Knowledge Guidance forLow-Light Image Enhancement

微光图像增强(LLIE)研究如何提高照明并生成正常光图像。现有的大多数方法都是通过全局和统一的方式来改善低光图像,而不考虑不同区域的语义信息。如果没有语义先验,网络可能很容易偏离区域的原始颜色。为了解决这个问题&#xff0…

Linux 定时删除过期文件

需求说明 每日凌晨0点定时删除/temp目录下的所有一个月未被访问的文件。 脚本实现 linux 终端输入crontab -e,添加定时任务脚本命令 [rootlocalhost ~]# crontab -e在文件末尾追加 0 0 * * * find /temp -atime 30 -exec rm -rf {} \;参数说明 命令格式&#…

计算机网络(1):开始

计算机网络(1):开始 计算机网络在信息时代中的作用 21世纪的一些重要特征就是数字化、网络化和信息化,是一个以网络为核心的信息时代。要实现信息化就必须依靠完善的网络,因为网络可以非常迅速地传递信息。因此网络现…

BAQ压缩原理

什么是BAQ? BAQ——Block Adaptive Quantization,块自适应量化 BAQ是一种数据压缩算法。 谁提出了BAQ压缩? BAQ压缩原理是由美国NASA JPL的R. Kwok和W.T.K. Johnson在1989年提出的。第一次被用于美国NASA的“麦哲伦金星探测”任务中。 BAQ压缩的目的是什么? 上世纪后半…

使用Python进行文本处理:深入探索文本分析和操作

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 使用Python进行文本处理:深入探索文本分析和操作,全文3800字,阅读大约12分钟。 文本处理是数据科学和自然语言处理中的关键任务之一。Pyt…

【Mode Management】ComM详细介绍

目录 1. Introduction and functional overview 2.Dependencies to other modules 3.Functional specification 3.1 Partial Network Cluster Management 3.2 ComM channel state machine 3.2.1 Behaviour in state COMM_NO_COMMUNICATION 3.2.1.1 COMM_NO_COM_NO_PENDI…

【Qt QML入门】TextInput

TextInput:单行文本输入框。 TextInput除了光标和文本外,默认没有边框等效果。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: truetitle: qsTr("Hello World")//单行文本输…

typescript使用解构传参

看下面这个函数 interface Student {id: number;name: string;class: string;sex: string;}function matriculation(student: Student) {//...}我们要调用它,就需要传递一个实现了Student约束的对象进去 interface Student {id: number;name: string;class: string;sex: string…

【算法】算法题-20231211

这里写目录标题 一、387. 字符串中的第一个唯一字符二、1189. “气球” 的最大数量三、1221. 分割平衡字符串 一、387. 字符串中的第一个唯一字符 简单 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回…

uniapp实现地图电子围栏功能

该功能使用uniapp中内置组件map实现 效果图预览&#xff1a; 实现过程&#xff1a; 1.文档&#xff1a; 2.代码&#xff1a; <template><view><map :style"width: 100%; height:screenHeight" :latitude"latitude" :longitude"longit…

lightdb 23.4 支持pivot行转列

前言 lightdb-x从23.4版本支持pivot行转列功能&#xff1b;先了解oracle支持行转列功能&#xff1a; 语法如下&#xff1a; oracle描述如下&#xff1a; Oracle 11g introduced the new PIVOT clause that allows you to write cross-tabulation queries which transpose …

【数据结构】复习题(一)

一、选择题 1.组成数据的基本单位是()。 A. 数据项 B.数据类型 C.数据元素 D.数据变量 2.设数据结构A{D,R},其中D&#xff5b;1,2,3,4},R{r},r{<1,2>,<2,3>,< 3,4>,<4,1>}&#xff0c;则数据结构A是()。 A.线性结构 B.树型结构 C.图型结构 D.集合 3.…

DC电源模块的设计与制造技术创新

BOSHIDA DC电源模块的设计与制造技术创新 DC电源模块的设计与制造技术创新主要涉及以下几个方面&#xff1a; 1. 高效率设计&#xff1a;传统的DC电源模块存在能量转换损耗较大的问题&#xff0c;技术创新可通过采用高效率的电路拓扑结构、使用高性能的功率开关器件和优化控制…

【深度学习目标检测】四、基于深度学习的抽烟识别(python,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…